当前位置: 首页 > 知识库问答 >
问题:

Web Application Cors .NET CORE 3.1 vs 2.1

穆飞龙
2023-03-14

最近,我所做的一切都慢慢切换到.NET CORE 3.1,但是当我尝试移植我的一些Web应用程序(Restful API)时,我遇到了Cors的问题。

来自项目运行的代码。网络核心2.1:

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

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

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseCors("AllowAnyOrigin");

            app.UseHttpsRedirection();

            app.UseMvc();
        }

运行.NET CORE 3.1的项目中的代码:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddCors(options =>
            {
                options.AddPolicy("AllowAnyOrigin",
                builder => builder
                    .AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader());
            });

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

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }

            app.UseCors("AllowAnyOrigin");

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

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

当我向运行2.1的API发出请求时,一切都按预期进行,但如果我尝试向运行3.1的API发出相同的请求,我会收到405错误(方法不允许错误)。

有没有其他人遇到过这个问题,如果是这样,解决方案是什么?

共有1个答案

陆俊迈
2023-03-14

在您的配置方法中,移动:

app.UseCors("AllowAnyOrigin");

介于

app.UseRouting();

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

留档中有一个警告,指出必须在这两种方法之间配置cors中间件,否则中间件将停止运行。

https://learn . Microsoft . com/en-us/aspnet/core/security/CORS?view=aspnetcore-3.1

请参阅标有“将CORS策略应用于所有endpoint”的部分

配置管道中的组件是很棒的,因为它给了你控制权,但由于排序限制,这是一个巨大的痛苦,我个人正在等待有人创建一个VS插件,它将分析这些并抛出警告。如果有人愿意,这将是一个伟大的项目。

 类似资料:

相关问答

相关文章

相关阅读