为Web API 1启用CORS .net 4.0

ned*_*ull 8 c# asp.net-mvc cors asp.net-web-api

我需要为我的Web API启用CORS,目前我无法升级到Framework 4.5.(我了解System.Web.Http.Cors.EnableCorsAttribute.)

我试图将以下内容添加到我的Web.config中以查看它是否有效,但它没有:

<system.webServer>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
  </customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)

我还试图通过使用System.Web.Http.Filters.ActionFilterAttribute手动将Access-Control-Allow-Origin标头设置为"*"(基于这篇文章:向Web API中的所有响应添加自定义标头) -但由于请求在进入动作过滤之前被拒绝,因此无法解决问题.

所以我现在有点卡住..任何帮助都表示赞赏.

编辑:结果

<add name="Access-Control-Allow-Origin" value="*"/>
Run Code Online (Sandbox Code Playgroud)

一直是答案,我测试它之前我一定做错了.但是这个解决方案意味着所有操作都启用了CORS(现在可以使用).

Ari*_*yak 10

POST,PUT,DELETE等使用预先发布的CORS.浏览器发送OPTIONS请求.这是因为浏览器首先检查服务器端是否可以使用OPTIONS请求处理CORS ,如果成功,则发送实际请求PUTPOSTDelete.由于您没有处理OPTIONS的操作方法,因此您将获得405.在最简单的形式中,您必须在控制器中实现这样的操作方法.

更多解释 - http://www.w3.org/TR/cors/#resource-preflight-requests

http://www.html5rocks.com/en/tutorials/cors/

public HttpResponseMessage Options()
{
    var response = new HttpResponseMessage();
    response.StatusCode = HttpStatusCode.OK;
    return response;
}
Run Code Online (Sandbox Code Playgroud)

注意:此操作只响应OPTION请求,因此您需要添加必要的配置web.config,例如Access-Control-Allow-Origin = *Access-Control-Allow-Methods = POST,PUT,DELETE.

Web API 2 有CORS支持,但使用Web API 1,您必须遵循此路径.


Mar*_*Ban 9

尝试添加:

    <add name="Access-Control-Allow-Headers" value="*" />
Run Code Online (Sandbox Code Playgroud)