webapi requests origin net microsoft enable cross control aspnet asp allow asp.net-web-api oauth cors owin

asp.net-web-api - requests - microsoft aspnet webapi cors



owin cors o web api cors (2)

Hay una manera de arreglar esto. Dado que las bibliotecas OWIN y ASP.NET.CORS funcionan simultáneamente. El token de Owin o el método de autenticación deben configurarse para habilitar CORS por separado de todos los demás controladores API.

Primero, no uses cors con Owin en Startup.cs:

public void Configuration(IAppBuilder app) { //app.UseCors(CorsOptions.AllowAll);

Encuentre el método GrantResourceOwnerCredentials y agregue Access-Control-Allow-Origin al contexto para que cuando devuelva una llamada después de que se complete la autenticación, el navegador encuentre el encabezado y lo acepte.

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "http://localhost" });

Ahora instale el paquete Microsoft.AspNet.WebApi.Cors de Nuget a su proyecto webapi, y agregue esto al método de Registro

public static void Register(HttpConfiguration config) { var cors = new EnableCorsAttribute("http://localhost, ", "accept,accesstoken,authorization,cache-control,pragma,content-type,origin", "GET,PUT,POST,DELETE,TRACE,HEAD,OPTIONS"); config.EnableCors(cors);

Trabajó para mi.

Hay cientos de preguntas sobre CORS en web-api, y sobre cómo habilitar CORS, hay una respuesta diferente que proporciona cada una. Estoy tan confundido y no sé cuál es la respuesta correcta. Y el problema es que ninguna de las respuestas lo explica en forma precisa, lo que hace cada línea de código, de modo que puedo entender y resolver mi problema en lugar de copiar y pegar el código.

De todos modos, la pregunta es: estoy usando la API de asp.net web usando owin. Y necesito habilitar CORS. ¿cómo lo hago? Hay ajustes de cors para OWIN

application.UseCors(CorsOptions.AllowAll);

y hay ajustes de cors para la api web asp.net

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

cuál debería usar dado que no estoy usando OAUTH (estoy especificando esto porque las respuestas en SO son diferentes cuando usamos OAUTH v / s cuando no lo usamos).

¿Debo habilitar CORS para OWIN y WEB-API o solo para uno de ellos? Hay un problema si ambos están habilitados, lea aquí

Sería de gran ayuda si alguien me puede explicar la diferencia entre

  1. Cors de owin
  2. APIs web
  3. CORS con OAUTH utilizando OWIN / WEBAPI

También hay respuestas para el api web auto alojado contra el web-api alojado en owin, lo que se suma a la confusión :(, perdón por la perorata


Se supone que debe utilizar Web API''s CORS si necesita que CORS se aplique a sus controladores API . Para todo lo demás (como un servicio de token) está atascado con tener que usar Owin.Cors .

Si termina usando ambos, deberá asegurarse de que no se superpongan y aplicar CORS dos veces a la misma solicitud.

Web API 2.2 facilita la EnableCorsAttribute CORS al proporcionar el EnableCorsAttribute .

Uso básico

[EnableCors("*", "*", "*")] public class ResourcesController : ApiController { ...

Definición de atributo

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, AllowMultiple = false)] public EnableCorsAttribute( string origins, string headers, string methods )

Para habilitar el uso global de CORS

public static class WebApiConfig { public static void Register(HttpConfiguration config) { var cors = new EnableCorsAttribute("www.example.com", "*", "*"); config.EnableCors(cors); // ... } }

También necesitarás instalar el paquete CORS desde nuget

Install-Package Microsoft.AspNet.WebApi.Cors