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

ASP.NET Core无MVC场景下如何从自定义中间件为路由添加AllowAnonymousAttribute

ASP.NET Core 配置授权回退策略下指定路由匿名访问方案

静态文件匿名访问配置

有两种可选实现方式:

  • 方式1:通过端点路由托管静态文件,添加匿名元数据(推荐,符合ASP.NET Core规范)
    首先在服务注册时开启静态文件端点支持:
services.AddStaticFiles();

然后在端点配置中指定需要开放匿名的静态文件路径:

app.UseEndpoints(config =>
{
    // 示例:开放/public路径下所有静态文件的匿名访问
    config.MapStaticFiles("/public")
          .WithMetadata(new AllowAnonymousAttribute());

    // 原有其他端点配置保留
    config.MapHealthChecks("/.well-known/live", new HealthCheckOptions { Predicate = _ => false }).WithMetadata(new AllowAnonymousAttribute());
    config.MapHealthChecks("/.well-known/ready").WithMetadata(new AllowAnonymousAttribute());
    config.MapEAVFrameworkRoutes();
    config.MapPost("/.auth/login/passwordless", async (httpcontext) =>
    {
        // ...原有逻辑
    }).WithMetadata(new AllowAnonymousAttribute()); 
    // 如需开放回调接口匿名访问也添加对应元数据
    config.MapGet("/.auth/login/passwordless/callback", async (httpcontext) =>
    {
        // ...原有逻辑
    }).WithMetadata(new AllowAnonymousAttribute());
});
  • 方式2:分支中间件提前处理指定路径静态文件,跳过授权校验
    将需要匿名的静态文件处理逻辑放在认证、授权中间件之前执行:
// 放在UseAuthentication、UseAuthorization之前执行
app.MapWhen(context => context.Request.Path.StartsWithSegments("/public"), appBuilder =>
{
    appBuilder.UseDefaultFiles();
    appBuilder.UseStaticFiles();
});

app.UseAuthentication();
app.UseAuthorization();
// 后续原有中间件逻辑保留

自定义中间件匿名访问配置

两种方式均可实现,无需强制使用端点路由:

  • 方式1:通过端点路由映射自定义中间件,添加匿名元数据(推荐,可复用授权系统的元数据逻辑)
app.UseEndpoints(config =>
{
    // 映射自定义中间件到指定路由,添加匿名元数据
    config.Map("/custom-route-prefix", appBuilder =>
    {
        appBuilder.UseMiddleware<NextJSMiddleware>();
    }).WithMetadata(new AllowAnonymousAttribute());

    // 其他原有端点配置
});
  • 方式2:在自定义中间件内标记授权已处理,跳过后续授权校验
    直接在NextJSMiddleware的Invoke方法中标记授权逻辑已完成,不会触发回退策略校验:
public async Task InvokeAsync(HttpContext context)
{
    // 判断当前请求是否属于需要开放匿名的路径
    if (context.Request.Path.StartsWithSegments("/allow-anon-custom-path"))
    {
        // 标记授权已处理,跳过后续授权中间件的回退策略校验
        var authFeature = context.Features.Get<IAuthorizationFeature>();
        authFeature?.ApplyPolicy(null);
    }

    // 保留原有自定义中间件逻辑
    // ...
}

注意事项

  • 现有代码中UseAuthorization位于UseStaticFiles和自定义中间件之前,所有未配置匿名元数据的请求都会触发回退策略校验,按需求调整配置即可。
  • 若自定义中间件处理的路由需要匹配复杂规则,优先使用端点路由的方式配置,可避免路径匹配逻辑重复开发。

内容的提问来源于stack exchange,提问作者Poul K. Sørensen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 13:36:03