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
- Cors de owin
- APIs web
- 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