ASP owin以某种方式覆盖CORS头,我可以在哪里禁用它?

时间:2015-07-04 21:42:57

标签: asp.net http-headers cors owin

在我的API的选项响应中,我看到了:

Access-Control-Allow-Origin:http://localhost:19600

我想要的是CORS全部启用所以:

Access-Control-Allow-Origin:*

我应该注意到它确实有效,并突然停止工作。但我不知道为什么。

在我的OWIN启动配置中:

app.UseCors(CorsOptions.AllowAll);
var config = new HttpConfiguration();
WebApiConfig.Register(config);
app.UseWebApi(config);

有人在另一个帖子中建议先放app.UseCors(CorsOptions.AllowAll);会有所帮助,但事实并非如此。

我发现有一种方法可以在Web.config <system.webServer><httpProtocol><customHeaders>创建自定义标头。

我尝试添加行<add name="Access-Control-Allow-Origin" value="*" />,但这导致了两个标题,浏览器不接受。按<remove name="Access-Control-Allow-Origin"/>删除没有任何效果(既不与添加相结合)。

还有其他可以设置标题的地方吗?

1 个答案:

答案 0 :(得分:1)

我设法找到了解决方法。

我不知道这有什么影响,但是有效

将其添加到OWIN配置

private static void ConfigureCORSHeader(IAppBuilder app)
{
    app.Use(async (context, next) =>
    {
        var req = context.Request;
        var res = context.Response;

        res.Headers.Set("Access-Control-Allow-Origin", "*");

        if (req.Method == "OPTIONS")
        {
            res.StatusCode = 200;
            res.Headers.AppendCommaSeparatedValues("Access-Control-Allow-Methods", "GET", "POST", "DELETE");
            res.Headers.AppendCommaSeparatedValues("Access-Control-Allow-headers", "authorization", "content-type");

            return;
        }

        await next();
    });
}