在一个 asp.net core 应用中,想通过不同的二级域名访问静态文件,却发现已配置的 CORS 策略对静态文件不起作用
services.AddCors(
options =>
options.AddPolicy(
"Default",
builder => builder
.SetIsOriginAllowedToAllowWildcardSubdomains()
.WithOrigins("https://*.cnblogs.com")
.AllowAnyMethod().AllowAnyHeader().AllowCredentials()
.Build()));
app.UseCors();
app.UseStaticFiles();
请问如何解决这个问题?
app.UseCors 所使用的 middleware 的确不支持静态文件,需要自己调用 ICorsPolicyProvider
与 ICorsService
进行处理,实现了下面的方法
private static async Task ApplyCorsPolicyAsync(ICorsService corsService, ICorsPolicyProvider corsPolicyProvider, HttpContext context)
{
var policy = await corsPolicyProvider.GetPolicyAsync(context, CorsPolicyName)
?? throw new Exception("CORS policy is null");
var corsResult = corsService.EvaluatePolicy(context, policy);
corsService.ApplyResult(corsResult, context.Response);
}
在 StaticFileOptions
的 OnPrepareResponseAsync
中调用这个方法
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponseAsync = ctx => ApplyCorsPolicyAsync(corsService, corsPolicyProvider, ctx.Context)
});
这个里面只能是 * 或者完整的域名吧