【问题标题】:Faliure to Use Cors in WebApi in .Net Core 3.1 [duplicate]在 .Net Core 3.1 的 Web Api 中无法使用 Cors [重复]
【发布时间】:2020-04-18 01:55:04
【问题描述】:

我需要从提供服务的来源以外的来源访问我的 .NET Core 3.1 WebApi。但是,当我关注 the guidance from Microsoft 时,我仍然在客户端收到以下 JavaScript 错误:

CORS 策略已阻止从源“http://localhost:64237”获取“http://localhost:50679/merchants”的访问权限:对预检请求的响应未通过访问控制检查:预检请求不允许重定向。

在我的 Startup 类中,我的 ConfigureServices 方法如下所示:

public void ConfigureServices(IServiceCollection services)
    { 
        services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder =>
                {
                    builder.WithOrigins("http://localhost:64237");
                });
        });

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

        services.AddControllers();
    }

...我的 Configure 方法如下所示:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors("CorsPolicy");

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

然后我在我调用的控制器方法上使用了 EnableCors 属性,如下所示:

[EnableCors("CorsPolicy")]

我在 StackOverflow 上看到了几篇关于 Cors 的帖子,但没有一篇有帮助,因为我没有看到我做错了什么 - 但是,它们中的大多数都不是特定于 .NET Core 3.1 的。我还做了一个感觉检查并设置断点来检查所有上述代码是否正在运行。

谁能解释一下为什么我在这种情况下无法使用 Cors?

【问题讨论】:

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


    【解决方案1】:

    您可以尝试从 Startup.cs 中删除 app.UseCors("CorsPolicy")app.UseEndpoints(...) 块,因为它通过 CORS 中间件将 CORS 策略应用于所有应用程序端点,而 [EnableCors("CorsPolicy")] 通过控制器启用它, 动作方法等

    对于 Microsoft,您应该同时使用这两种方法:

    我们建议不要合并策略。使用 [EnableCors] 属性或中间件,不能同时在同一个应用中。

    // Remove this piece of code
    app.UseCors("CorsPolicy");
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
    

    并且还可以使用以下方法更新您的政策:

    options.AddPolicy(
        "CorsPolicy",
        builder =>
        {
            builder.
                WithOrigins("http://localhost:64237").
                AllowAnyHeader().
                AllowAnyMethod();
        });
    

    【讨论】:

      【解决方案2】:

      我想你应该添加一些其他权限

      builder.AllowAnyMethod()
          .AllowAnyHeader()
          .AllowCredentials()
          .WithOrigins("http://localhost:64237");
      

      【讨论】:

        猜你喜欢
        • 2020-08-27
        • 1970-01-01
        • 2020-04-27
        • 2019-02-11
        • 1970-01-01
        • 2020-09-09
        • 2019-01-24
        • 2021-02-14
        • 2020-06-14
        相关资源
        最近更新 更多