【发布时间】:2018-02-14 17:56:00
【问题描述】:
我正在使用 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()
);
}
此设置适用于获取请求。 但是对于我的 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。
对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:12528” 使用权。响应的 HTTP 状态代码为 401。
来自 Fiddler 我的 http 请求是;
选项http://localhost:17972/api/fault/10/close HTTP/1.1
接受:/
访问控制请求方法:PUT
访问控制请求标头:接受
UA-CPU:AMD64
接受编码:gzip,放气
用户代理:Mozilla/5.0 (Windows NT 10.0; Win64; x64;Trident/7.0; rv:11.0) 像 Gecko
主机:本地主机:17972
内容长度:0
DNT:1
连接:保持活动状态
编译指示:无缓存
那么我该如何解决这个问题?
编辑 我也试过这段代码只是为了让它工作,但我得到了同样的错误;
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();
}
【问题讨论】:
-
你添加了内容类型吗?
-
我将“Content-Type”放在头变量中,然后将其包含在 WithHeaders 方法中,正如您在代码中看到的那样。从那以后,我尝试了“AnyHeader()”,结果相同。
-
对不起,我没有解释得这么详细,我说的是请求。您有原始 HTTP 请求吗?
-
来自 Fiddler:OPTIONS localhost:17972/api/fault/10/close HTTP/1.1 接受:/ 来源:localhost:12528 Access-Control-Request-Method:PUT Access-Control-Request-Headers:接受 UA-CPU: AMD64 Accept-Encoding: gzip, deflate User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like Gecko Host: localhost:17972 Content-Length: 0 DNT : 1 连接: Keep-Alive Pragma: no-cache
标签: c# asp.net asp.net-core-webapi preflight