在 .Net Core 3.1 的 Web Api 中无法使用 Cors [重复]

Posted

技术标签:

【中文标题】在 .Net Core 3.1 的 Web Api 中无法使用 Cors [重复]【英文标题】:Faliure to Use Cors in WebApi in .Net Core 3.1 [duplicate] 【发布时间】: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")]

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

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

【问题讨论】:

【参考方案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");

【讨论】:

以上是关于在 .Net Core 3.1 的 Web Api 中无法使用 Cors [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

无法在.net core 3.1 web api中找出CORS

Asp.net core 3.1 保护 API 和 Web 应用程序

在 .Net Core 3.1 的 Web Api 中无法使用 Cors [重复]

在测试 ASP.Net Core 3.1 Web Api 期间跳过 JWT Auth

Blazor ASP.Net Core 3.1 Web API 在发布时返回 404 错误