【发布时间】:2020-12-20 19:49:00
【问题描述】:
我的系统由两部分组成:.NET Core 2.1 后端 Web API 和 Angular 5 前端。对于所有 POST/PUT 请求,我都有一个错误:
访问 XMLHttpRequest 在 来自来源的“https://BACK_END_PATH/api/documents” “https://FRONT_END_PATH”已被 CORS 政策阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。
并且为预检请求返回 HTTP 状态代码 401。
在 Angular 中,我使用 Windows 身份验证并使用凭据发送请求:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add windows credentials
request = request.clone({
withCredentials: true
});
}
我已经为所有请求、方法、标头和凭据打开了 CORS,并检查了是否在 MVC 之前应用了 CORS:
readonly string CorsAllowSpecificOrigins = "_corsAllowSpecificOrigins";
public void ConfigureServices (IServiceCollection services)
{
// allow CORS
services.AddCors (options => {
options.AddPolicy (CorsAllowSpecificOrigins,
builder => {
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowCredentials()
.AllowAnyMethod ();
});
});
services.AddMvc (options => {
options.Filters.Add (typeof (ModelValidatorFilter));
})
.SetCompatibilityVersion (CompatibilityVersion.Version_2_1);
//comment for brevity
}
public void Configure (IApplicationBuilder app, IHostingEnvironment env)
{
//comment for brevity
app.UseCors (CorsAllowSpecificOrigins);
app.UseHttpsRedirection ();
app.UseMvc (routes => {
routes.MapRoute (
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
}
我认为问题是 'application/json' Content-Type,但 Postman 中使用了相同的类型,并且 Postman 请求工作正常。
另外,我找到了一个打开匿名用户的解决方案,但不幸的是我无法在我的系统中使用这个技巧。
Update1:我也试过这样设置原点:
builder.WithOrigins("https://FRONT_END_PATH")
.SetIsOriginAllowedToAllowWildcardSubdomains()
.AllowAnyHeader()
.AllowCredentials()
.AllowAnyMethod();
但错误是一样的。
【问题讨论】:
-
如果您要使用
withCredentials: true,那么您必须在具有特定来源的服务器上配置 CORS。AllowAnyOrigin()不会。你必须使用WithOrigins(...)。 docs.microsoft.com/en-us/aspnet/core/security/… -
这是我以前的方法,我设置了 builder.WithOrigins("FRONT_END_PATH") .SetIsOriginAllowedToAllowWildcardSubdomains() .AllowAnyHeader() .AllowCredentials() .AllowAnyMethod();但它没有用。
-
我可以假设
FRONT_END_PATH是客户端应用程序的完全限定 URL 吗?协议、域和端口? -
是的,它看起来像 sitename.com ,末尾没有斜线。
标签: angular asp.net-core .net-core cors asp.net-core-webapi