Avancer de mon processus d'apprentissage du développement de l'application mobile, j'ai trouvé un nouvel obstacle: partage de demande de croix d'origine ou CORS. P>
J'utilise une combinaison d'angularjs + jquery mobile (client de téléphone Cordova) et ASP.NET Web API (Backend). Mon problème est que je n'ai pas été en mesure de remplir une demande de post (ou d'un autre type de demande) à un contrôleur API. p>
mon contrôleur angularjs utilise la méthode de service J'ai mis en œuvre le sélecteur d'action Cors à partir du message suivant: Activation des CORS dans le projet API Web . Même dur, je peux appeler la méthode API de Fiddler, Angularjs continue à défaillir la demande de pré-ampleur des options. p>
Y a-t-il quelque chose que je devrais être au courant des appels angulaires et des appels croisés? Toute solution possible à ma situation? P>
merci. p> http.post () code> pour appeler le contrôleur API Web. Toutefois, Chrome Debugger affirme que l'appel a échoué dans une demande d'options (éventuellement la Demande de préfecture de Cors). P>
4 Réponses :
Consultez les objets Cors ThinkTecure, avec ceux (Nugettable), vous pouvez obtenir une prise en charge de Cors complète dans WebAPI sans aucun code de votre choix. P>
Même avec une implémentation correcte des Cors, j'ai eu un problème très étrange avec IIS 7 qui a été résolu en permettant à tous les verbes pour webdav (oui, webdav - ne me demandez pas pourquoi je viens de suivre des instructions sur un poteau de blog: - D). P>
Faites ceci: p>
Encore une fois, aucune idée de la raison pour laquelle Webapi utilise WebDAV, mais ces problèmes résolus avec Post et Supprimer ne fonctionneraient pas malgré une implémentation correcte des CORS. P>
Vous pouvez ignorer la demande d'option de préfixe en utilisant Type de contenu: Application / X-www-Form-Urlencodé.
angularjs: strong> p> <system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<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="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Cache-Control" />
<add name="Access-Control-Allow-Credentials" value="true" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
Cela a fonctionné avec microsoft.aspnet.webapi.cors et sans la partie web.config
Tout en trébuchant sur ce numéro avec Angularjs 1.3 avec Microsoft Web API 2, j'ai trouvé une solution simple au problème de la configuration de Cors.
premier de Nuge Intall - Microsoft Webapi Cors P>
puis dans votre fichier webapiconfig.cs: p>
Vous pouvez également activer Cors partout avec A * au lieu de votre site Web, mais qui défait le but de CORS et ouvre des trous de sécurité - mais vous pouvez le faire pour les tests. p> L'ensemble WebAPI.cors vous permet également d'activer le contrôleur CORS par contrôleur ou avec d'autres détails plus granulaires. Les autres détails peuvent être trouvés Ici sur le site Web API. P> p>
config.Enablecors (); devrait être config.Enablecors (CORS);
La plupart des développeurs lors de l'exécution de l'interface utilisateur et du service sur localhost font face à ce problème - il existe de nombreuses façons de résoudre - beaucoup de façons - beaucoup des développeurs ont tendance à le réparer au niveau du navigateur "mais c'est une violation de la sécurité. P >
La méthode correcte consiste à résoudre ce problème à votre service de service Web - après la vidéo suivante expliquera et résoudre ce p>
regarder CORS-Mise en œuvre de la mise en œuvre de la ressource de ressources d'origine ("a expliqué - Partage de ressources d'origine croisée ")! P>
une autre question à la question de l'angularjs Re: Options