visual verb used studio servidor remoto permitido page origin not net método metodo method error err_aborted enablecors domain detallado cross control attribute asp allowed allow c# asp.net-mvc cors asp.net-web-api2

c# - verb - OPCIONES 405(Método no permitido) web api 2



put 405(method not allowed) (5)

A través de nuget, realice la instalación del paquete de API web de CORS para su proyecto:

Paquete de instalación Microsoft.AspNet.WebApi.Cors

En WebApiConfig agrega las siguientes líneas:

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

He creado una API web 2 y estoy intentando hacerle una solicitud de dominio cruzado, pero aparece el siguiente error:

OPCIONES http://www.example.com/api/save 405 (Método no permitido)

He echado un vistazo y la mayoría de las soluciones para este problema dicen que necesito instalar CORs de NuGet y habilitarlo, así que instalé el paquete y marqué mi controlador con

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

Pero esto todavía no ha resuelto el problema.

Mi ApiController solo tiene el siguiente método de Save en:

[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); } }

Este es mi js de un dominio diferente:

$.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); } });

¿Hay algo más que deba hacer para habilitar esto?


Al final he resuelto esto cambiando la solicitud de ajax. Descubrí que la verificación previa de OPTIONS solo se envía en ciertas situaciones, una de ellas es si la solicitud contiene un tipo de Content-Type que no es uno de los siguientes tipos:

  • aplicación / x-www-form-urlencoded
  • multipart / form-data
  • Texto sin formato

Entonces, eliminando el tipo de contenido en mi solicitud de ajax y cambiándolo a lo siguiente:

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

Pude hacerlo funcionar.

Esta página tiene información útil sobre solicitudes simples y cómo evitar solicitudes de verificación previa


Asegúrese de tener OPCIONES como uno de los verbos permitidos en su web.config y de que el controlador predeterminado lo maneja.

<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"/>


Esta solucionó mi problema

Paso 1

Instale el paquete Cors Microsoft.AspNet.WebApi.Cors (Haga clic con el botón derecho en Solución> Gestionar paquete Nuget> y luego busque Cors)

Paso 2

ponga esta línea en el archivo WebApiConfig.cs

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

Cambie http: // localhost: 3000 a la dirección del API Caller


También intente utilizar la opción de solicitud ajax 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); } });