我正在使用Web Core API并按如下方式设置CORS;
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var url = Configuration["origenUrl"];
var header = "Content-Type";
app.UseCors(
options => options.WithOrigins(url).WithHeaders(header).AllowAnyMethod().AllowCredentials()
);
}
此设置适用于Get Requests。 但是对于我的Put请求;
$.ajax({
url: url,
method: "PUT",
xhrFields: { withCredentials: true }
})
.done(callback)
//.fail(errorMessage);
.fail(function (jqXHR, textStatus, errorThrown) {
alert("Something went wrong: " + textStatus + " " + errorThrown);
errorCallback();
});
我收到此错误消息;
XMLHttpRequest无法加载http://localhost:17972/api/fault/1/close。
对预检请求的响应未通过访问控制检查:否 '访问控制允许来源'标题出现在请求的上 资源。起源' http://localhost:12528'因此是不允许的 访问。响应的HTTP状态代码为401。
来自Fiddler我的http请求是;
选项http://localhost:17972/api/fault/10/close HTTP / 1.1
接受: /
访问控制请求方法:PUT
Access-Control-Request-Headers:accept
UA-CPU:AMD64
Accept-Encoding:gzip,deflate
User-Agent:Mozilla / 5.0(Windows NT 10.0; Win64; x64; Trident / 7.0; rv:11.0),如Gecko
主持人:localhost:17972
内容长度:0
DNT:1
连接:Keep-Alive
Pragma:no-cache
那么我该如何解决这个问题呢?
EDIT 我也试过这个代码只是为了让它工作,但我得到了同样的错误;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//var url = Configuration["originUrl"];
//app.UseCors(
// options => options.WithOrigins(url).AllowAnyHeader().AllowAnyMethod().AllowCredentials()
//);
app.UseCors(
options => options.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials()
);
app.UseMvc();
}
答案 0 :(得分:1)
尝试使用AllowAnyHeader而不是WithHeaders,它必须有效。 问题是您需要“Content-Type”标头,但不会被发送。 如果要保持WithHeaders检查,请添加“Access-Control-Request-Method”。
更多信息:https://docs.microsoft.com/en-us/aspnet/core/security/cors
答案 1 :(得分:1)
我知道这有点老了,但是我遇到了同样的问题,并且能够解决问题。我一直在遵循有关如何在全球范围内启用CORS的Microsoft指南。我在Startup.cs文件中设置以下代码...
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://localhost");
});
});
该指南确实有一个使用本地主机的示例,但是它仅在“ Test CORS”部分中。在那里,它们表明您还必须具有端口号。 我将代码更改为:
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://localhost:3000")
.AllowAnyHeader();
});
});
我还添加了AllowAnyHeader(如上所述),一切正常! HTH
答案 2 :(得分:0)
我遇到了类似的问题,其中GET请求可以正常工作,但是POST请求会给我与OP得到的同样恼人的消息。 下面的代码对我有用,在我的情况下,其他答案还不完整:
res = Vjunk - beta * V