C# 在ASP.NET中,对飞行前请求的响应不';t通过访问控制检查:否';访问控制允许原点';标题
我正在使用一个Web核心API,并已按如下方式设置CORSC# 在ASP.NET中,对飞行前请求的响应不';t通过访问控制检查:否';访问控制允许原点';标题,c#,asp.net,asp.net-core-webapi,preflight,C#,Asp.net,Asp.net Core Webapi,Preflight,我正在使用一个Web核心API,并已按如下方式设置CORS public void ConfigureServices(IServiceCollection services) { services.AddCors(); ... } public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
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请求。
但是为了我的请求
$.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
对飞行前请求的响应未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源。因此,不允许使用源“”
通道响应的HTTP状态代码为401
从Fiddler我的http请求是
选项HTTP/1.1
接受:/
来源:
访问控制请求方法:PUT
访问控制请求头:接受
UA-CPU:AMD64
接受编码:gzip,deflate
用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64;Trident/7.0;rv:11.0)类似Gecko
主机:本地主机:17972
内容长度:0
DNT:1
连接:保持活力
Pragma:没有缓存
那么我该如何解决这个问题呢
编辑
我也尝试过这个代码只是为了让它工作,但我得到了同样的错误
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();
}
尝试使用AllowAnyHeader而不是Headers,它必须有效。 问题是您需要一个“Content-Type”头,但没有被发送。 如果要保持WithHeaders检查,请添加“访问控制请求方法”
更多信息:我知道这有点陈旧,但我只是遇到了同样的问题,并且能够解决这个问题。我遵循的是微软关于如何在全球范围内启用CORS的指南。我在Startup.cs文件中设置了以下代码
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://localhost");
});
});
指南中确实有一个使用本地主机的示例,但是它位于“testcors”部分的末尾。在这里,它们显示您还必须有端口号。
我将代码更改为:
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://localhost:3000")
.AllowAnyHeader();
});
});
我还添加了AllowAnyHeader(如上所述),一切都很好!
HTH我遇到了一个类似的问题,GET请求可以正常工作,但是POST请求会给我与OP-GET相同的愤怒信息。 下面的代码适用于我,其他答案在我的案例中并不完整:
public void配置服务(IServiceCollection服务)
{
services.AddCors(选项=>
{
options.AddDefaultPolicy(
生成器=>
{
建筑商。来源(“http://localhost:1337")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
services.AddControllers();
services.AddRazorPages();
}}
是否添加了内容类型?我将“content type”放在header变量中,该变量随后包含在WithHeaders方法中,如代码中所示。后来我尝试了“AnyHeader()”,结果也一样。对不起,我没有解释,因为我是在谈论这个请求。您有原始HTTP请求吗?来自Fiddler:OPTIONS HTTP/1.1 Accept:/Origin:Access Control请求方法:放置访问控制请求头:Accept UA-CPU:AMD64 Accept Encoding:gzip,deflate用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64;Trident/7.0;rv:11.0)像Gecko主机:localhost:17972内容长度:0 DNT:1连接:保持活动Pragma:no cache我试过了,但没用。一段时间以来,我一直在看这个链接——这是一个很好的链接——试图找出我能做什么。你也可以避免使用库,并在web.config中添加cors规则:为了尝试让它工作,我现在使用AllowAnyOrigin(),但这并不能解决问题仍然是同样的问题吗?你能用新代码更新你的问题吗?