最近,我所做的一切都慢慢切换到.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错误(方法不允许错误)。
有没有其他人遇到过这个问题,如果是这样,解决方案是什么?
在您的配置方法中,移动:
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插件,它将分析这些并抛出警告。如果有人愿意,这将是一个伟大的项目。