【发布时间】:2019-02-18 14:13:43
【问题描述】:
我正在尝试在 Startup.cs 中启用 CORS,但没有成功。我在端口 4200 上有一个 Angular 应用程序,试图与我的 c# Web 应用程序通信。我在 Angular 中不断收到此错误
无法加载 http://localhost:52008/Account/GetJWT:预检响应没有 HTTP ok 状态。
我的研究似乎表明 CORS 未正确启用。知道我错过了什么吗?
public void ConfigureServices(IServiceCollection services)
{
.....
services.AddCors(options =>
{
options.AddPolicy("EnableCORS", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials()
.Build();
});
});
.........
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.......
app.UseCors("EnableCORS");
........
}
这是 Angular POST 请求:
login(form: NgForm) {
let credentials = JSON.stringify(form.value);
console.log(credentials);
this.http.post("http://localhost:52008/Account/GetJWT", credentials, {
headers: new HttpHeaders({
"Content-Type": "application/json"
})
})
}
POSTMAN 查询结果
【问题讨论】:
-
似乎
AllowCredentials导致OPTIONS动词see this QA 出现问题。将[EnableCors("EnableCORS")]放入控制器似乎比为每个请求全局注册更好。如果您可以使用邮递员查看标题,那将是最好的.. -
或者
app.UseCors("EnableCORS");在app.UseMvc()之后被调用.. -
请查看Fiddler Proxy,熟悉它并经常使用它 - 它会准确地告诉您所有您的请求和响应的情况,以及作为 API/全栈开发人员,您将节省数小时来处理此类问题。找出预检请求的 HTTP 状态是什么,您将能够更好地确定如何修复它。
-
Windows 身份验证?改用 IIS CORS 模块,docs.microsoft.com/en-us/iis/extensions/cors-module/…
-
@BagusTesa 上面的图片是您在 Postman 中看到标题的意思吗?我检查了-
app.UseCors("EnableCORS");在 app.UseMvc() 之前被调用
标签: c# asp.net asp.net-mvc