OPTIONS 405 (méthode non autorisée) Web api 2

J’ai créé une API Web 2 et j’essaie de lui faire une requête interdomaine, mais l’erreur suivante s’affiche:

OPTIONS http://www.example.com/api/save 405 (méthode non autorisée)

J’ai jeté un coup d’œil et la plupart des solutions à ce problème disent que je dois installer les COR de NuGet et l’activer. J’ai donc installé le paquet et marqué mon contrôleur avec

[EnableCors("*", "*", "*")] 

Mais cela n’a toujours pas résolu le problème.

Mon ApiController uniquement la méthode de Save suivante dans:

 [ResponseType(typeof(int))] public IHttpActionResult Save(Student student) { if (ModelState.IsValid) { using (StudentHelper helper = new StudentHelper()) { return Ok(helper.SaveStudent(student)); } } else { return BadRequest(ModelState); } } 

Ceci est mon js d’un domaine différent:

 $.ajax({ type: "POST", crossDomain: true, data: JSON.ssortingngify(student), crossDomain: true, url: 'http://www.example.com/api/save', contentType: "application/json", success: function (result) { console.log(result); } }); 

Y a-t-il autre chose que je dois faire pour permettre ceci?

Via nuget, installez le package de l’API Web CORS pour votre projet:

Package d’installation Microsoft.AspNet.WebApi.Cors

Dans WebApiConfig, ajoutez les lignes suivantes:

 var cors = new EnableCorsAtsortingbute ("*", "*", "*"); config.EnableCors (cors); 

Assurez-vous que OPTIONS est l’un des verbes autorisés dans votre web.config et qu’il est géré par le gestionnaire par défaut.

  ...  ...    

En fin de compte, j’ai résolu ce problème en modifiant la requête ajax. J’ai découvert que le contrôle en amont d’ OPTIONS n’est envoyé que dans certaines situations, notamment si la demande contient un type de Content-Type un des types suivants:

  • application / x-www-form-urlencoded
  • multipart / form-data
  • texte simple

Donc, en supprimant le type de contenu dans ma demande ajax et en le modifiant comme suit:

 $.ajax({ type: "POST", crossDomain: true, data: student, dataType: 'json', url: 'http://www.example.com/api/save', success: function (result) { console.log(result); } }); 

J’ai pu le faire fonctionner.

Cette page contient des informations utiles sur les requêtes simples et sur la manière d’éviter les requêtes de contrôle en amont.

Essayez également d’utiliser l’option de demande ajax withcredentials

  $.ajax({ type: "POST", crossDomain: true, data: JSON.ssortingngify(student), withCredentials: true, url: 'http://www.example.com/api/save', contentType: "application/json", success: function (result) { console.log(result); } }); 

Celui-ci a résolu mon problème

Étape 1

Installez le package Cors Microsoft.AspNet.WebApi.Cors (Solution du clic droit> Gérer le package Nuget> puis recherchez Cors)

Étape 2

mettre cette ligne dans le fichier WebApiConfig.cs

 public static void Register(HttpConfiguration config) { config.EnableCors(new EnableCorsAtsortingbute("http://localhost:3000", headers: "*", methods: "*")); . . . } 

Remplacez http: // localhost: 3000 par l’adresse de l’appelant API