OPTIONS 405 (Méthode non autorisée) api web 2
j'ai créé une api web 2 et j'essaie de faire une requête de domaine croisée mais j'obtiens l'erreur suivante:
OPTIONS http://www.example.com/api/save 405 (Méthode Non Autorisée)
j'ai fait un tour d'horizon et la plupart des résolutions pour ce problème disent que je dois installer CORs à partir de NuGet et l'activer donc j'ai installé le paquet et marqué mon contrôleur avec
[EnableCors("*", "*", "*")]
mais cela n'est pas encore résolu le problème.
Mon ApiController
uniquement a la suite Save
méthode:
[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);
}
}
C'est mon js à partir 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);
}
});
Est-il autre chose que je dois faire pour l'activer?
5 réponses
Via nuget faire l'installation du paquet D'API Web CORS pour votre projet:
Install-Package Microsoft.AspNet.WebApi.La scro
dans WebApiConfig ajouter les lignes suivantes:
var cors = new EnableCorsAttribute ("*", "*", "*");
config.EnableCors (cors);
assurez-vous que vous avez des OPTIONS comme 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 aussi d'utiliser l'option withcredentials ajax request
$.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);
}
});
celui-ci a résolu mon problème
Etape 1
installer le paquet Cors Microsoft.AspNet.WebApi.La scro (Clic Droit sur la Solution > Gestion de Package Nuget > Et Ensuite, la Recherche de la Scro)
Etape 2
mettre cette ligne dans le WebApiConfig.cs le fichier
public static void Register(HttpConfiguration config)
{
config.EnableCors(new EnableCorsAttribute("http://localhost:3000", headers: "*", methods: "*"));
.
.
.
}
Modifier http://localhost:3000 pour l'adresse de l'API de l'Appelant
à la fin j'ai résolu cela en changeant la requête ajax. J'ai trouvé que l' OPTIONS
le pré-vol n'est envoyé que dans certaines situations - l'une d'elles étant si la demande contient un Content-Type
ce n'est pas l'un des types suivants:
- application / x-www-form-urlencoded
- multipart / form-data
- text / plain
donc en supprimant le type de contenu dans ma requête ajax et en le changeant en suivantes:
$.ajax({
type: "POST",
crossDomain: true,
data: student,
dataType: 'json',
url: 'http://www.example.com/api/save',
success: function (result) {
console.log(result);
}
});
j'ai été en mesure de le faire fonctionner.