Web API 2 Cors 请求错误
Posted
技术标签:
【中文标题】Web API 2 Cors 请求错误【英文标题】:Web API 2 Cors Request Error 【发布时间】:2016-06-10 06:59:04 【问题描述】:我正在尝试为我正在使用 WebAPI 2 处理的项目设置 CORS。我开始遇到问题,所以我直接从 asp.net 论坛here 创建了一个演示应用程序。一切正常,直到我需要使用 json 作为内容类型。然后我开始得到:
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
我了解这种内容类型会发送预检请求,但我对如何让它通过感到目瞪口呆。我错过了什么吗?一旦我从 AJAX 请求中删除“contentType:'application/json'”属性,它就可以工作了。
TestController.cs
[Authorize]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class TestController : ApiController
// GET api/<controller>
public HttpResponseMessage Get()
return new HttpResponseMessage()
Content = new StringContent("GET: Test message")
;
public HttpResponseMessage Post([FromBody]string name)
return new HttpResponseMessage()
Content = new StringContent("POST: Test message")
;
public HttpResponseMessage Put()
return new HttpResponseMessage()
Content = new StringContent("PUT: Test message")
;
WebApiConfig.cs
public static void Register(HttpConfiguration config)
// Web API configuration and services
config.EnableCors();
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
Ajax 请求
$.ajax(
type: "POST",
url: 'http://localhost:17515/',
data: JSON.stringify("Test"),
xhrFields:
withCredentials: true
,
contentType: "application/json"
);
【问题讨论】:
OPTIONS 405 (Method Not Allowed) web api 2的可能重复 【参考方案1】:在您的 WebApiConfig.cs 中,您可以尝试在此处而不是在控制器上启用 cors 属性。
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
而不仅仅是
config.EnableCors();
这是我目前正在运行的一个测试项目。
【讨论】:
【参考方案2】:客户端首先会向服务器发送一个OPTIONS
请求。对于这个请求,服务器应该添加一个标头:
Access-Control-Allow-Origin: http://localhost:17822
这表示在 17515 端口上运行的 API 接受来自 17822 端口服务的客户端的请求。
您可以尝试将属性更改为:
[EnableCors(origins: "http://localhost:17822", headers: "*", methods: "*")]
我们没有使用EnableCors
的良好体验,因此我们使用 OWIN 处理 OPTIONS 请求,只需返回 200 OK 并手动将适当的标头添加到已批准来源发送的所有 OPTIONS 请求中。
MSDN上有一篇关于CORS的好文章(可能你已经看过了):https://msdn.microsoft.com/en-us/magazine/dn532203.aspx
【讨论】:
以上是关于Web API 2 Cors 请求错误的主要内容,如果未能解决你的问题,请参考以下文章
即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求
Web Api 2 和 Angular 之间的 CORS 错误
Web Api 2 Preflight CORS 请求承载令牌
http 请求被 Flutter Web 的 Cors 策略阻止