origin net mvc enable cross asp allow all angularjs cors asp.net-web-api2

angularjs - net - Solicitud de CORS Preflight de Web Api 2 para token de portador



web api 2 cors localhost (3)

Tengo una aplicación web con un front-end AngularJS y un back-end Web Api 2, y utiliza tokens-tokens para la autenticación.

Todo está bien en FireFox e IE, pero con Chrome, mi solicitud de inicio de sesión inicial es ALGUNA VEZ precargada.

Aquí está la llamada del servicio AngularJS:

$ http.post ( http://localhost:55483/token , data, {headers: {''Content-Type'': ''application / x-www-form-urlencoded''}}). success (function (response) {. ..});

La solicitud de verificación previa se revierte con un error "Permitir acceso-control-origen".

Sin embargo, si vuelvo a hacer clic en el botón Iniciar sesión (volviendo a enviar la solicitud anterior), todo está bien.

¿Alguna idea sobre cómo prevenir / atrapar / manejar esto?

PD: uso el LOC

context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

en el archivo ApplicationOAuthProvider.cs para colocar el encabezado de permiso CORS en la solicitud / Token, que funciona bien en IE, FireFox y, a veces, en Chrome.


El siguiente es un comentario de lujo:

Descubrí esto con la ayuda de la publicación de LeftyX el 29 de junio:
- Mueva esta aplicación app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); a la PRIMERA LÍNEA en el método ConfigureAuth de Startup.Auth.cs .
- Luego, QUITE este context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); del método GrantResourceOwnerCredentials () de ApplicationOAuthProvide.cs .

La verificación previa de CORS (solicitud de CORS) se maneja adecuadamente, y luego el recambio real pasa a través


Gracias hombre, me salvas todo el día.
Porque esto sucede para muchos muchachos, traigo su comentario al cuadro de respuestas para que otros puedan verlo.

No quiero votar por esto. Por favor comenta mi respuesta en su lugar

Gracias


Espero que esto sea capaz de ayudar a alguien por ahí. Para mi:

  • añadiendo el app.useCors(); LOC no funcionó.
  • Añadiendo el app.useCors(); LOC trabajó para otras personas en mi equipo.

Así que necesitaba una solución que funcionara en todos los entornos.

En última instancia, lo que terminé haciendo fue agregar el encabezado y el valor a la derecha en Web.config con lo siguiente (donde localhost: 9000 es mi aplicación de nodo que está sirviendo angular) :

<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="http://localhost:9000" /> <add name="Access-Control-Allow-Headers" value="Content-Type"/> </customHeaders> </httpProtocol> </system.webServer>

Luego, en producción, simplemente puede cambiar el valor de origen a la url de front-end de producción.

Si desea que CORS esté habilitado para todos los orígenes, cambie el valor a "*" .


Por defecto, Access-Control-Max-Age: segundos es 0 y sus solicitudes no se almacenan en caché.

Intente establecerlo en el valor máximo: (autohost de Owin). Resuelve problemas con peticiones de OPCIONES extras.

app.UseCors(new CorsOptions { PolicyProvider = new CorsPolicyProvider { PolicyResolver = context => Task.FromResult(new CorsPolicy { AllowAnyHeader = true, AllowAnyMethod = true, AllowAnyOrigin = true, SupportsCredentials = false, PreflightMaxAge = Int32.MaxValue // << ---- THIS }) } });