2013-04-06 2 views
4

Я пишу непосредственно в заголовки запроса в 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 на новом сервере, чтобы убедиться, что это что-то локализованное на конкретном компьютере.

ответ

2

Возможно, ваши проблемы вызваны OPTIONSVerbHandler. См. Эту ссылку для получения более подробной информации:
http://eugeneagafonov.com/post/38312919044/iis-options-cors-aspnet-webapi-en

+0

Это очень хорошее предложение. Я действительно пришел к такому выводу вчера и нашел эту точную статью, но даже с '' ни один из заголовков, которые я пишу для ответа, выходит с другой стороны в IIS. Я собираюсь развернуть на другой сервер для тестирования. –

Смежные вопросы