2013-04-06 52 views
4

我通過HttpContext.Current對象直接寫入到一個ASP.NET MVC請求頭,但這些標題不被髮送到瀏覽器...任何想法可能會導致這個?如果我通過web.config添加它們,我只能得到標題。這對我不起作用,因爲我需要允許多個域名到Access-Control-Allow-OriginCORS標頭不會發送到瀏覽器

我試圖使用此代碼直接將標題寫入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是不是已安裝。

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(); 
    } 

更新2013年4月9日:無論是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的另一端。我將部署到另一臺服務器進行測試。 – 2013-04-09 13:06:47

相關問題