Asp.net mvc 4 附加到HTTP响应的CORS头未发送到浏览器

Asp.net mvc 4 附加到HTTP响应的CORS头未发送到浏览器,asp.net-mvc-4,asp.net-web-api,iis-7.5,cors,Asp.net Mvc 4,Asp.net Web Api,Iis 7.5,Cors,我正在通过HttpContext直接写入ASP.NET MVC中的请求头。当前的对象,但是这些头没有被发送到浏览器。。。你知道这是什么原因吗?我只有在通过web.config添加标题时才能获取标题。这对我不起作用,因为我需要允许多个域访问控制允许源站 我试图使用此代码将标题直接写入HttpContext.Current context.Response.AppendHeader("Access-Control-Allow-Origin", origin); context.Response.Ca

我正在通过
HttpContext直接写入ASP.NET MVC中的请求头。当前的
对象,但是这些头没有被发送到浏览器。。。你知道这是什么原因吗?我只有在通过web.config添加标题时才能获取标题。这对我不起作用,因为我需要允许多个域
访问控制允许源站

我试图使用此代码将标题直接写入
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());
我得到了hello world,但没有标题

我也尝试过使用
Thinktecture.IdentityModel.Http.Cors.WebApi
,但得到了相同的结果,这是徒劳的。我已经检查了一个代码,并重新检查了我的代码,以确保它符合教程的要求]。我已在Web.config中配置了标题,并尝试通过Thinktecture获取标题,但我仅在Web.config中存在
Access Control Allow Origin
时才获取标题,但我仍然在Chrome/FF中获取错误。看起来只有在选项请求时才会发送标题,但我不确定

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
这是我的建议,以免把问题搞得一团糟。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/04/09更新:上下文.Response.AppendHeader(…)
和上下文.Response.AddHeader(…)
都不起作用。如果Chrome和FF获得JSONP而不考虑allow origin头,那么它们看起来是可以的,这样我的项目至少可以正常工作。我也尝试过
,但没有成功。我将把MVC应用程序部署到一个新的服务器上,看看它是否本地化到特定的机器上。

可能是,您的问题是由于选项VerbHandler造成的。 有关详细信息,请参阅此链接:

这是一个很好的建议。事实上,我昨天已经得出了这个结论,并且找到了那篇确切的文章,但即使是
我为响应编写的标题也没有一个在IIS中出现。我将部署到另一台服务器上进行测试。你有没有发现这个问题?在另一台服务器上工作正常。我最终为这个系统创建了一个CORS代理,因为这比将它部署到一个新服务器要容易。