POST请求的.NET Core CORS问题

问题描述

我有一个由两部分组成的系统:.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,并检查了MORS之前是否应用了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();

错误是相同的。

解决方法

this doc中,您可以找到以下信息:

CORS预检请求用于确定服务器是否将请求的资源设置为跨源共享。并且OPTIONS请求始终是匿名的,如果未启用匿名身份验证,服务器将无法正确响应预检请求。

enter image description here

要解决此问题,如果您在本地运行该应用程序以进行CORS测试,则可以尝试启用匿名身份验证。

此外,如果您的应用托管在IIS上,则可以尝试安装IIS CORS module并为该应用配置CORS。