首页 新闻 会员 周边 捐助

ASP.NET Core 中 app.UseCors 对静态文件不作用

0
悬赏园豆:30 [已解决问题] 解决于 2025-07-30 16:48

在一个 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();

请问如何解决这个问题?

dudu的主页 dudu | 高人七级 | 园豆:24874
提问于:2025-07-30 13:12
< >
分享
最佳答案
0

app.UseCors 所使用的 middleware 的确不支持静态文件,需要自己调用 ICorsPolicyProviderICorsService 进行处理,实现了下面的方法

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);
}

StaticFileOptionsOnPrepareResponseAsync 中调用这个方法

app.UseStaticFiles(new StaticFileOptions
{
    OnPrepareResponseAsync = ctx => ApplyCorsPolicyAsync(corsService, corsPolicyProvider, ctx.Context)
});

解决方法来自 Enabling CORS for StaticFiles in ASP.NET Core

dudu | 高人七级 |园豆:24874 | 2025-07-30 16:46
其他回答(1)
0

这个里面只能是 * 或者完整的域名吧

收获园豆:30
摸鱼w | 园豆:440 (菜鸟二级) | 2025-07-30 16:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册