asp.net mvc 4 - net - Los encabezados CORS se anexan a la respuesta HTTP no enviada al navegador
enable cors web config (1)
Escribo directamente a los encabezados de solicitud en un ASP.NET MVC a través del objeto HttpContext.Current
y, sin embargo, estos encabezados no se envían al navegador ... ¿Alguna idea de lo que podría causar esto? SÓLO obtengo los encabezados si los agrego a través de web.config. Esto no funciona para mí, ya que necesito permitir dominios múltiples para Access-Control-Allow-Origin
.
Intenté escribir los encabezados directamente en HttpContext.Current
usando este código.
context.Response.AppendHeader("Access-Control-Allow-Origin", origin);
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World " + DateTime.Now.ToString());
Obtengo el mundo de hola pero no los encabezados.
También intenté utilizar Thinktecture.IdentityModel.Http.Cors.WebApi
pero Thinktecture.IdentityModel.Http.Cors.WebApi
los mismos resultados, que no es nada. Comprobé y volví a verificar mi código para asegurarme de que se ajusta al tutorial] 1 . He configurado los encabezados en Web.config e intenté a través de Thinktecture. Sin embargo, solo obtengo los encabezados cuando Access-Control-Allow-Origin
está en web.config, pero sigo recibiendo un error en Chrome / FF. Parece que los encabezados solo se envían en la solicitud OPTIONS, pero no estoy seguro.
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,ga;q=0.6,pt-BR;q=0.4,pt;q=0.2
Access-Control-Request-Headers:accept, origin, content-type
Access-Control-Request-Method:GET
Authorization:Negotiate REDACTED
Cache-Control:max-age=0
Connection:keep-alive
Host:bpapi.domain.com
Origin:http://dev-02
Referer:http://dev-02/_Layouts/PAR/NewParItem.aspx
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
HTTP/1.1 200 OK
Server: Microsoft-IIS/7.5
Persistent-Auth: false
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: http://dev-02
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept
WWW-Authenticate: Negotiate REDACTED
Date: Sat, 06 Apr 2013 00:35:31 GMT
Content-Length: 0
Aquí está el web.config como un pastebin para no complicar la pregunta. WebDAV no está instalado.
public class CorsConfig
{
public static void RegisterCors(HttpConfiguration httpConfig)
{
WebApiCorsConfiguration corsConfig = new WebApiCorsConfiguration();
corsConfig.RegisterGlobal(httpConfig);
corsConfig
.ForResources(new string[] { "Industries", "Projects" })
.ForOrigins(new string[] { "http://dev-01", "http://dev-02" })
.AllowAll();
}
}
Aquí está el código de Thinktecture:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//CorsConfig.RegisterCors(GlobalConfiguration.Configuration);
RegisterCors(MvcCorsConfiguration.Configuration);
}
private void RegisterCors(MvcCorsConfiguration corsConfig)
{
corsConfig
.ForResources(new string[] {"Industries", "Projects" })
.ForOrigins(new string[] { "http://dev-01", "http://dev-02" })
.AllowAll();
}
Actualización 04/04/04: ni context.Response.AppendHeader(...)
ni context.Response.AddHeader(...)
tienen ningún efecto. Chrome y FF parecen estar bien si obtienen JSONP independientemente del encabezado allow origin, por lo que mi proyecto funciona al menos. También probé <remove name="OPTIONSVerbHandler"/>
sin éxito. Implementaré la aplicación MVC en un nuevo servidor para ver si se trata de algo localizado en la máquina específica.
Puede ser, sus problemas se deben a OPTIONSVerbHandler. Vea este enlace para más detalles:
http://eugeneagafonov.com/post/38312919044/iis-options-cors-aspnet-webapi-en