Я пишу непосредственно в заголовки запроса в ASP.NET MVC через объект HttpContext.Current
, но эти заголовки не отправляются в браузер ... Любая идея, что может вызвать это? Я ТОЛЬКО получаю заголовки, если добавляю их через web.config. Это не работает для меня, поскольку мне нужно разрешить нескольким доменам Access-Control-Allow-Origin
.Заголовки CORS, прикрепленные к HTTP-ответу, не отправленные в браузер
Я попытался написать заголовки непосредственно на HttpContext.Current
, используя этот код.
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());
Я получаю мир привет, но не заголовки.
Я также попытался использовать Thinktecture.IdentityModel.Http.Cors.WebApi
, но получить те же результаты, что и ничего. Я проверил перепроверенный код, чтобы убедиться, что он соответствует учебнику] 1. Я сконфигурировал заголовки в Web.config и попытался с помощью Thinktecture, но я получаю заголовки только в том случае, когда Access-Control-Allow-Origin
находится в web.config, но я все еще получаю сообщение об ошибке в Chrome/FF. Похоже, что заголовки отправляются только по запросу OPTIONS, но я не уверен.
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
Вот web.config as a pastebin так, чтобы не загромождать вопрос. WebDAV is не установлен.
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();
}
}
Вот код 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();
}
Update 2013/04/09: Ни context.Response.AppendHeader(...)
ни context.Response.AddHeader(...)
имеют никакого эффекта. Chrome и FF выглядят нормально, если они получают JSONP независимо от заголовка разрешения источника, поэтому мой проект, по крайней мере, работает. Я также пробовал <remove name="OPTIONSVerbHandler"/>
без успеха. Я буду развертывать приложение MVC на новом сервере, чтобы убедиться, что это что-то локализованное на конкретном компьютере.
Это очень хорошее предложение. Я действительно пришел к такому выводу вчера и нашел эту точную статью, но даже с ' ' ни один из заголовков, которые я пишу для ответа, выходит с другой стороны в IIS. Я собираюсь развернуть на другой сервер для тестирования. –