You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 9中MapStaticAssets无法加载wwwroot公开静态资源问题

问题

在.NET 9中使用MapStaticAssets替代UseStaticFiles,根据官方文档,在UseAuthorization之前调用该方法时,wwwroot下的静态资源应无需授权即可公开访问。但实际项目中,当将Authorization的FallbackPolicy设置为DefaultPolicy后,出现登出页面渲染异常、直接访问静态资源(如localhost:7119/css/site.css)会被强制要求认证的问题。

相关授权配置代码:

builder.Services.AddAuthorization(options =>
{
    // By default, all incoming requests will be authorized according to the default policy.
    options.FallbackPolicy = options.DefaultPolicy;
});

完整项目代码示例:

var builder = WebApplication.CreateBuilder(args);

var settings = builder.Configuration.GetSection("AzureAd");
var initialScopes = builder.Configuration["MicrosoftGraph:Scopes"]?.Split(' ');

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(settings)
        .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
            .AddInMemoryTokenCaches();

builder.Services.AddAuthorization(options =>
{
    // By default, all incoming requests will be authorized according to the default policy.
    options.FallbackPolicy = options.DefaultPolicy;
});
builder.Services.AddRazorPages()
    .AddMicrosoftIdentityUI();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.MapStaticAssets();

app.UseRouting();

app.UseAuthentication();

app.UseAuthorization();

app.MapRazorPages()
   .WithStaticAssets();
app.MapControllers();

app.Run();
原因与解决方案

这是配置问题,并非Bug。

当设置options.FallbackPolicy = options.DefaultPolicy后,所有未明确指定授权策略的请求都会默认应用DefaultPolicy(即要求用户已认证)。MapStaticAssets仅负责映射静态资源路由,但该路由仍会受到全局FallbackPolicy的约束,不会自动豁免认证要求。

解决方法是为静态资源路由显式添加匿名访问允许:

app.MapStaticAssets().AllowAnonymous();

修改后的请求管道配置片段:

app.UseHttpsRedirection();

// 为静态资源添加匿名访问豁免
app.MapStaticAssets().AllowAnonymous();

app.UseRouting();

app.UseAuthentication();

app.UseAuthorization();

app.MapRazorPages()
   .WithStaticAssets();
app.MapControllers();

此配置生效后,wwwroot下的静态资源将绕过认证要求,可正常公开访问,登出页面的静态资源也能正常加载。

内容的提问来源于stack exchange,提问作者OjM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:25:04