教程参考:
- https://docs.microsoft.com/zh-cn/aspnet/core/security/cors?view=aspnetcore-3.1#enable-cors-with-endpoint-routing 微软官方文档
- https://github.com/cq-panda/Vue.NetCore/blob/master/开发版dev/Vue.NetCore/Vue.Net/VOL.WebApi/Startup.cs vol-vue框架项目中使用
一、在 ASP.NET Core 的应用程序中启用 CORS
启用CORS有三种方法:
- 使用 命名策略 或 默认策略的中间件 (这次展示这种方法)
- 使用 终结点路由
- 带有 [EnableCors] 属性的
另外两种方法可以参考微软文档。
1).在appsettings.json文件中添加允许的站点地址
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
//多个url用豆号隔开,url为站点的地址,可以将发布后的地址也同时配置上
"CorsUrls": "http://example.com,http://www.contoso.com"
}
2).在Startup.cs文件中配置CORS
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//必须appsettings.json中配置
string corsUrls = Configuration["CorsUrls"];
if (string.IsNullOrEmpty(corsUrls))
{
throw new Exception("请配置跨请求的前端Url");
}
services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins(corsUrls.Split(","))
//添加预检请求过期时间
.SetPreflightMaxAge(TimeSpan.FromSeconds(2520))
.AllowCredentials()
.AllowAnyHeader().AllowAnyMethod();
});
});
// services.AddResponseCaching();
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors();//必须将对的调用 UseCors 置于UseRouting之后 但在UseAuthorization之前 原因可查阅;https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-3.1#middleware-order
// app.UseResponseCaching();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
这样,就已经配置好了,前端直接请求就行了。