J'ai créé une API Web 2 et j'essaie de lui faire une demande interdomaine mais j'obtiens l'erreur suivante:
OPTIONS http://www.example.com/api/save 405 (méthode non autorisée)
J'ai jeté un coup d'œil et la plupart des résolutions de ce problème disent que je dois installer les COR de NuGet et l'activer, j'ai donc installé le package et marqué mon contrôleur avec
[EnableCors("*", "*", "*")]
Mais cela n'a toujours pas résolu le problème.
Mon ApiController
n'a que la méthode 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);
}
}
Voici mes js d'un domaine différent:
$.ajax({
type: "POST",
crossDomain: true,
data: JSON.stringify(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 activer cela?
En fin de compte, j'ai résolu ce problème en modifiant la demande ajax. J'ai découvert que le contrôle en amont OPTIONS
n'est envoyé que dans certaines situations, notamment si la demande contient un Content-Type
qui ne fait pas partie des types suivants:
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.
Via nuget, faites l'installation du package d'API web CORS pour votre projet:
Install-Package Microsoft.AspNet.WebApi.Cors
Dans WebApiConfig, ajoutez les lignes suivantes:
var cors = new EnableCorsAttribute ("*", "*", "*");
config.EnableCors (cors);
Celui-ci a résolu mon problème
Étape 1
Installez le package Cors Microsoft.AspNet.WebApi.Cors (Solution de 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 EnableCorsAttribute("http://localhost:3000", headers: "*", methods: "*"));
.
.
.
}
Remplacez http: // localhost: 30 par l'adresse de l'appelant API
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.
<system.web>
...
<httpHandlers>
...
<add path="*" verb="OPTIONS" type="System.Web.DefaultHttpHandler" validate="true"/>
<add path="*" verb="TRACE" type="System.Web.DefaultHttpHandler" validate="true"/>
<add path="*" verb="HEAD" type="System.Web.DefaultHttpHandler" validate="true"/>
Essayez également d'utiliser l'option de demande ajcr withcredentials
$.ajax({
type: "POST",
crossDomain: true,
data: JSON.stringify(student),
withCredentials: true,
url: 'http://www.example.com/api/save',
contentType: "application/json",
success: function (result) {
console.log(result);
}
});