您需要启用CORS在你的Web Api。全局启用 CORS 的更简单且首选的方法是将以下内容添加到网络配置
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
请注意,Methods都是单独指定的,而不是使用*
。这是因为在使用的时候出现了一个bug*
.
您还可以启用CORS通过代码。
Update
下列NuGet需要包:Microsoft.AspNet.WebApi.Cors
.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.EnableCors();
// ...
}
}
然后您可以使用[EnableCors]
像这样的操作或控制器上的属性
[EnableCors(origins: "http://www.example.com", headers: "*", methods: "*")]
或者您可以全局注册
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var cors = new EnableCorsAttribute("http://www.example.com", "*", "*");
config.EnableCors(cors);
// ...
}
}
您还需要处理预检Options
requests with HTTP OPTIONS
要求。
Web API
需要回应Options
请求以确认它确实配置为支持CORS
.
要处理这个问题,您所需要做的就是发送一个空响应后退。您可以在操作中执行此操作,也可以在全局范围内执行此操作,如下所示:
# Global.asax.cs
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Flush();
}
}
添加此额外检查是为了确保旧的APIs
旨在仅接受GET
and POST
请求不会被利用。想象一下发送一个DELETE
请求一个API
设计的时候这个verb不存在。结果是不可预料的结果可能是危险的.