ASP.NET WEBAPI 项目Cors跨域
设置跨域
-
安装Nuget包 Microsoft.AspNet.WebApi.Cors
-
在App_Start/WebApiConfig 中 的 Register 方法内 注册跨域
config.EnableCors(new EnableCorsAttribute("*", "*", "GET,POST,OPTIONS") { SupportsCredentials = true });
详情可以参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
中间的坑
复杂请求仍然不可跨域
按照官方文档进行设置之后发现复杂请求(一些自定义header 或者 自定义body的post请求)仍然不能跨域。原因可能是浏览器在发送复杂请求的时候会进行预先请求一个请求类型为OPTIONS的请求, Option 无法进入Global的Application_BeginRequest事件 所以 无法添加对应的 配置参数,所以预请求 后被拦截。浏览器会认为无法跨域
后面发现得在web.config 的<configuration> <system.webServer> <handlers>
中添加如下标签
<add name="OPTIONS" path="*" verb="OPTIONS" modules="ProtocolSupportModule" resourceType="Unspecified" />
OPTIONS请求的特殊header
OPTIONS请求会携带两个特殊的请求头 Access-Control-Request-Headers
和 Access-Control-Requst-Method
,如果要限制跨域请求的header 需要将这两个请求头和跨域请求头 Origin
一起加进去,否则也会被拦截