【发布时间】:2019-03-21 00:55:27
【问题描述】:
在 .NET 核心应用程序中为简单的 web api 设置 CORS 我有这个:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("GetPolicy",
builder => builder.AllowAnyOrigin()
.WithMethods("GET")
.WithHeaders("x-mycustomheader-cors"));
options.AddPolicy("PostPolicy",
builder => builder.AllowAnyOrigin()
.WithMethods("POST")
.WithHeaders("x-mycustomheader-cors"));
});
services.AddMvc();
}
我有一个像这样设置并且工作正常的 get 端点:
[HttpGet]
[EnableCors("GetPolicy")]
[AuthorizationFilter]
public IEnumerable<MyModel> Get()
{
//...
}
效果很好,但这(在不同的控制器中):
[HttpPost]
[EnableCors("PostPolicy")]
[AuthorizationFilter]
public void Post([FromBody]MyOtherModel[] models)
{
//...
}
失败:
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
如果我将PostPolicy 更改为:
options.AddPolicy("PostPolicy",
builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
然后 POST 可以跨域正常工作,但我更愿意不只是允许任何事情。那么我在这里错过了什么?
【问题讨论】:
-
@spender - 非常有用,谢谢。我刚刚得出的结论是,是
Content-Type绊倒了它,似乎是因为我将Content-Type设置为application/json,根据你的链接,Content-Type只有在以下情况下才会自动通过它是application/x-www-form-urlencoded、multipart/form-data或text/plain
标签: c# asp.net-core cors asp.net-core-webapi