附加到HTTP响应的CORS标头未发送到浏览器

Rob*_*her 5 iis-7.5 cors asp.net-mvc-4 asp.net-web-api

我通过HttpContext.Current对象直接写入ASP.NET MVC中的请求标头,但这些标头没有被发送到浏览器......任何想法可能导致什么?如果我通过web.config添加标题,我只能获取标题.这对我不起作用,因为我需要允许多个域Access-Control-Allow-Origin.

我试图直接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());
Run Code Online (Sandbox Code Playgroud)

我得到了hello world但不是标题.

我也试图使用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
Run Code Online (Sandbox Code Playgroud)

这是web.config作为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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是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();
    }
Run Code Online (Sandbox Code Playgroud)

更新2013/04/09:既context.Response.AppendHeader(...)没有context.Response.AddHeader(...)效果,也没有任何效果.如果他们获得JSONP而不管允许原始标题,那么Chrome和FF似乎没问题,所以我的项目至少可以工作.我也尝试<remove name="OPTIONSVerbHandler"/>过没有成功.我将把MVC应用程序部署到新服务器,看看它是否是本地化到特定机器的东西.

Vla*_*mir 2

可能,您的麻烦是由于 OPTIONSVerbHandler 造成的。有关详细信息,请参阅此链接:
http://eugeneagafonov.com/post/38312919044/iis-options-cors-aspnet-webapi-en