12
votes

Angularjs + ASP.NET Web API Domain Domain Problème

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.

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.

mon contrôleur angularjs utilise la méthode de service http.post () 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).

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.

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?

merci.


4 Réponses :


0
votes

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.

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).

Faites ceci:

  • Ouvrir le gestionnaire IIS, accédez à la cartographie du gestionnaire de votre application.
  • Double-cliquez sur le gestionnaire WebDAV
  • Cliquez sur "Restriction de demande"
  • sur l'onglet "Verbes", sélectionnez "Tous les verbes".

    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.


0 commentaires

11
votes

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>


1 commentaires

Cela a fonctionné avec microsoft.aspnet.webapi.cors et sans la partie web.config



3
votes

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 XXX

  • puis dans votre fichier webapiconfig.cs: XXX

    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.

    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.


1 commentaires

config.Enablecors (); devrait être config.Enablecors (CORS);



-1
votes

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é.

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

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 ")!


0 commentaires