从 .NET Core 2.1 迁移到 v3.1 后出现“被 CORS 阻止”错误

Posted

技术标签:

【中文标题】从 .NET Core 2.1 迁移到 v3.1 后出现“被 CORS 阻止”错误【英文标题】:"Blocked by CORS" error after migrating from .NET Core 2.1 to v3.1 【发布时间】:2021-11-25 07:33:45 【问题描述】:

我有一个最初用 .NET Core v2.1 编写的 Web 应用程序。

在我将它迁移到 .NET Core v3.1 之后 - 我的所有 UI 请求都抛出以下错误: *Access to XMLHttpRequest at 'https://myapp.net/v1/myendpoint' from origin 'https://mainapp.net' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.*

这是我的 Startup.cs:

        public void ConfigureServices(IServiceCollection services)
        
         ...
            services.AddCors(options =>
            
                options.AddPolicy("MyCorsPolicy", builder => builder
                     .AllowAnyOrigin()
                     .AllowAnyMethod()
                     .AllowAnyHeader());
            );
        ...
        


        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        
            app.MyRequireTLSOnRemoteConnections(); // <-- (proprietary)
            if (env.EnvironmentName == "Development")
            
                app.UseDeveloperExceptionPage();
            
            app.UseAuthentication();
            app.UseReportingAuthentication();
            app.UseCors("MyCorsPolicy");

            app.UseSwagger();
         ...
         

我有意删除了 app.UseHttpsRedirection(); 以完全禁用 HTTP 调用。

该问题是特定于 UI 的,并且在通过 Postman 执行端点时不会发生。

我已经尝试了不同的选项,我可以在互联网上找到,例如:

在 app.UseCors() 之前添加app.UseRouting();; 但仍然出现错误。

【问题讨论】:

【参考方案1】:

似乎解决我的问题的方法是将 app.UseCors("MyCorsPolicy"); 移到方法的顶部。至少它为我解决了这个问题。

【讨论】:

以上是关于从 .NET Core 2.1 迁移到 v3.1 后出现“被 CORS 阻止”错误的主要内容,如果未能解决你的问题,请参考以下文章

从.Net core 2.2迁移到.Net Core 3.0

从 ASP.NET MVC 迁移到 ASP.NET Core MVC

带有 Windows 身份验证的 ASP.NET Core 2.1 自定义 RoleProvider

为啥从 .net core 3.1 迁移到 .net 5 时 JSON 返回值发生了变化

从 2.2 .Net core 迁移到 3.0 Cors 错误

从 DotNetNuke 迁移到 ASP.NET Core