Angular.js $ resource avec ASP.Net webapi?

J’ai un simple service ASP.Net WebAPI qui assigne une variable statique sur POST / PUT et renvoie la valeur sur GET:

private static State Repo = null; public State Get() { return Repo; } public void Post(State value) { Repo = value; } public void Put(State value) { Repo = value; } 

Et j’ai une ressource angular définie comme suit:

 var stateService = angular.module('StateService', ['ngResource']); stateService.factory('State', function ($resource) { return $resource('http://localhost:8080/API/State'); }); 

Quand j’essaie de faire ceci:

 State.get(function (state) { $scope.data = state.data !== undefined ? state.data : '[Not Set]'; state.data = "newvalue"; state.$save(); }); 

Le get() fonctionne bien, mais le $save() lève cette erreur en chrome:

 XMLHttpRequest cannot load http://localhost:8080/API/State. Invalid HTTP status code 405 

CORS est déjà activé sur WebAPI (renvoie Access-Control-Allow-Origin: * ). Qu’est-ce que je rate?

Pour certaines demandes CORS, le navigateur envoie une demande supplémentaire, appelée “demande de contrôle en amont”, avant d’envoyer la demande réelle pour la ressource.

La demande préalable au vol utilise la méthode HTTP OPTIONS (code d’état 405). Il comprend deux en-têtes spéciaux:

  • Access-Control-Request-Method: La méthode HTTP qui sera utilisée pour la demande réelle.
  • En-têtes de demande de contrôle d’access: liste des en-têtes de demande que l’application a définis pour la demande réelle. (Là encore, cela n’inclut pas les en-têtes définis par le navigateur.)

Même si vous l’aviez activé pour CORS, il fonctionnait pour la requête GET et vous aviez indiqué qu’il 405 HTTP Status pour la requête POST . En effet, les requêtes POST,PUT,DELETE ne sont pas sécurisées, elles envoient d’abord la requête OPTIONS requête, vous devez y répondre, ce qui nécessitera des ressources telles que Access-Control-Allow-Origin: * , Access-Control-Allow-Methods: POST , puis il enverra à nouveau une demande POST , et cela fonctionnera ensuite.

Veuillez vérifier quels sont les en-têtes que vous envoyez en réponse. CORS POST , pour que la demande CORS POST aboutisse, vous devez au moins envoyer des Access-Control-Allow-Methods: POST avec la commande Access-Control-Allow-Origin: * avec la commande Access-Control-Allow-Origin: * .

Étapes pour le rendre compatible CORS:

  1. Installez ceci – Paquet d’installation Microsoft.AspNet.WebApi.Cors utilisant NuGet
  2. Ouvrez le fichier App_Start / WebApiConfig.cs. Ajoutez le code suivant à la méthode WebApiConfig.Register.
  3. Ensuite, ajoutez l’atsortingbut [EnableCors] à la classe de contrôleur:

    Avec les parameters suivants

    [EnableCors (origins: “votre_domaine”, en-têtes: “*”, méthodes: “POST”)]

  4. Redéployez votre projet WebAPI.

SOURCE – http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Plus de liens – http://www.codeproject.com/Articles/742532/Using-Web-API-Individual-User-Account-plus-CORS-En

Sur Web.config, commentez la ligne à

   

Si vous utilisez la configuration CORS par le fichier web.config.