L'activation de la SCRO avec WebAPI PUT / POST demandes?
J'ai essayé de suivre ce post, mais je ne suis pas encore tout à fait là:
Le soutien de la SCRO pour les METTRE et de les SUPPRIMER avec ASP.NET Web API
Dans mon web.config j'ai le texte suivant:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<httpProtocol>
<customHeaders>
<!-- TODO: don't let anyone make requests - only approved clients -->
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="WebDAV" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
</system.webServer>
Mais dans google chrome, quand je fais une requête POST-je obtenir les Permis Pas d'erreur:
Ma requête ressemble à ceci:
var request = $.ajax({
async: true,
url: apiEndpoint + 'api/login',
type: 'POST',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: 'json'
})
apiEndpoint est sur localhost, mais sur un autre port que le client et l'api de projets dans différentes solutions.
La demande POST finalement fait son chemin vers le serveur, mais j'ai toujours une erreur relative aux OPTIONS et je n'ai jamais eu un cookie enregistré pour le client à cause de cela.
J'ai passé les deux dernières heures à essayer d'obtenir de la SCRO avec WebAPI de travail:
https://aspnetwebstack.codeplex.com/wikipage?title=CORS%20support%20for%20ASP.NET%20Web%20API
Mais certains assemblée de problèmes de gestion des versions conduit à m'aspirer tout, espérons - nous, il y a une solution plus simple.
OriginalL'auteur SB2055 | 2013-07-06
Vous devez vous connecter pour publier un commentaire.
POST, PUT, DELETE, etc l'utilisation de pré-flighted de la SCRO. Le navigateur envoie une requête OPTIONS. Puisque vous n'avez pas une méthode d'action qui gère les OPTIONS, vous obtenez une 405. Dans sa forme la plus simple, vous devez mettre en œuvre une méthode d'action de ce genre dans votre contrôleur.
Une chose à noter est que le customHeaders vous avez configuré dans le web.config sera déjà l'ajout de la nécessaire
Access-Control-Allow-Origin
etAccess-Control-Allow-Methods
en-têtes. Donc, la méthode d'action n'est pas de faire de même.La mise en œuvre de la méthode d'action dans le contrôleur fonctionne, mais peut-être pas une bonne option. Une meilleure option sera de mettre en place un gestionnaire de message qui fait cela pour vous. Une bien meilleure option est d'utiliser thinktecture modèle d'identité afin de permettre la SCRO. Web API 2 a le soutien de la SCRO intégré (prise de ttidm).
Comment voulez-vous mettre en œuvre cette dans le contrôleur?
Omi POST ne crée pas la demande de contrôle en amont
Le dernier que j'ai entendu, le POST est pré-flighted, si le type de contenu est autre que l'application/x-www-form-urlencoded, multipart/form-data, ou text/plain. Comme par le code indiqué par l'OP, type de contenu application/json et qui sera pré-flighted.
Cela Fonctionne comme un charme!
OriginalL'auteur Badri