飞行前访问控制-允许凭证

时间:2018-10-17 18:48:13

标签: c# asp.net-core cors angular5

我将ASP.NET Core Web应用程序部署为Azure应用程序服务时遇到了CORS问题。前端被部署为其他应用程序服务。当我尝试从前端访问Api时,出现以下错误。

  

无法加载   https://chatclassifier.azurewebsites.net/chatcontroller/getchatData:   对预检请求的响应未通过访问控制检查:   响应中“ Access-Control-Allow-Credentials”标头的值   为”,当请求的凭据模式为时,必须为“ true”   '包括'。起源   'https://chatclassifierangularfrontend20180924084838.azurewebsites.net'   因此,不允许访问。请求的凭证模式   XMLHttpRequest发起的操作由withCredentials控制   属性。

我正在使用一些cookie在客户端和服务器之间传递数据。

我已经在Setup.cs中按如下方式在ASP.NET Core中设置了更多CORS策略

配置服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAllHeaders",
               builder =>
               {
                   builder
              .WithOrigins("https://XXXXXXXXXXangularfrontend20180924084838.azurewebsites.net")
              .AllowAnyMethod()
              .AllowAnyHeader()
              .AllowCredentials();
               });
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    services.Configure<FormOptions>(x =>
        {
            x.ValueLengthLimit = int.MaxValue;
            x.MultipartBodyLengthLimit = int.MaxValue;
        });
}

配置:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var cookiePolicyOptions = new CookiePolicyOptions
    {
        Secure = CookieSecurePolicy.SameAsRequest,
        MinimumSameSitePolicy = SameSiteMode.None
    };

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
    }

    app.UseCors("AllowAllHeaders");
    app.UseCookiePolicy(cookiePolicyOptions);
    app.UseHttpsRedirection();
    app.UseMiddleware(typeof(ApiExceptionHandling));
    app.UseMvc();
}

我没有在我的API代码中的其他任何地方添加任何其他与CORS相关的代码。我尝试将CORS“ AllowAllHeaders”属性添加到我的控制器中,但这也无法正常工作。

此外,我还在CORS下在Azure中的Web应用程序配置中添加了以下代码行。

enter image description here

很显然,我已将URL名称更改为包括XXXXXX,并确保在我的Azure门户和Web应用程序代码中它们都相同。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您不应将Azure App Service CORS配置与代码中的config结合使用。如果您在应用程序服务上启用CORS,则您的CORS配置在代码中基本上会被忽略。

这是由于App Service拦截了OPTIONS请求。