Cors在WebAPI上发布

时间:2014-10-20 22:13:10

标签: c# asp.net-web-api cors

在WebAPI上启用Cors

我在WebApiConfig.cs中有这个设置

config.EnableCors();

这就是我的控制器方法的属性设置方式:

[EnableCors("http://dev.example.com,http://personal.example.com,http://www.example.com", // Origin
                    "Accept, Origin, Content-Type, Options",                       // Request headers
                    "POST",                                                        // HTTP methods
                    PreflightMaxAge = 600                                          // Preflight cache duration
        )]

但我仍然得到错误:"' Access-Control-Allow-Origin'标头包含多个值。"

我还需要做些什么来防止这种情况发生?我们必须允许来自所有三个域。但前两个是最后一个的子域。

1 个答案:

答案 0 :(得分:2)

您是否在cors的web.config文件中设置了任何选项?即<add name="Access-Control-Allow-Origin" value="*"/>

之类的东西

如果是,请确保将其删除,并仅通过代码控制cors。

修改 好吧,这意味着无论请求命中哪个控制器,总是将标头添加到响应中,如果请求使用EnableCors属性命中控制器,它将添加另一个标头。如果您删除了Application_BeginRequest()中的那个,它应该可以工作,但这意味着您需要使用EnableCors属性来装饰所有其他控制器,这在您的情况下可能是可接受的,否则,您需要添加DelegateHandler,您可以在其中检查请求并根据请求的控制器设置cors。看看这个http://georgedurzi.com/implementing-cross-browser-cors-support-for-asp-net-web-api/它可能有助于从DelegateHandlers开始。希望有所帮助。