我通過HttpContext.Current
對象直接寫入到一個ASP.NET MVC請求頭,但這些標題不被髮送到瀏覽器...任何想法可能會導致這個?如果我通過web.config添加它們,我只能得到標題。這對我不起作用,因爲我需要允許多個域名到Access-Control-Allow-Origin
。CORS標頭不會發送到瀏覽器
我試圖使用此代碼直接將標題寫入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應用程序部署到新服務器上,以查看它是否是本地化到特定機器的東西。
這是一個非常好的建議。我昨天實際得出了這個結論,並且發現了精確的文章,但即使使用'「,我寫入響應的頭文件都不會出現在IIS的另一端。我將部署到另一臺服務器進行測試。 –
2013-04-09 13:06:47