最近用.net core3.1开发项目,其中在设置跨域的的时候,发现有个小坑,如果一不注意,可能需要花费很多时间来解决。
1、Startup文件设置跨域
public class Startup
{
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
public void ConfigureServices(IServiceCollection services)
{
//*设置允许所有来源跨域
//services.AddCors(options =>
//{
// options.AddPolicy(name: MyAllowSpecificOrigins,
// builder =>
// {
// builder.AllowAnyOrigin()
// .AllowAnyHeader()
// .AllowAnyMethod()
// .AllowCredentials();
// });
//});
//*设置允许跨域的来源
services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("http://192.168.2.186:8081", "http://localhost:3000")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
//添加 UseCors 添加 CORS 中间件 begin
app.UseCors(MyAllowSpecificOrigins);
//添加 UseCors 添加 CORS 中间件 end
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
2、注意事项
根据官网文档说明,必须按照如下的中间件顺序:
app.UseRouting()
app.UseCors()
app.UseAuthorization()
官网对此进行说明
官网中间件顺序
官网相关材料
启用跨域请求:https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-5.0