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

升级NuGet包后ASP.NET Core 3.1中Swagger授权头不显示原因排查

升级NuGet包后ASP.NET Core 3.1 Swagger不再显示授权头的解决方案

这个问题大概率是因为你升级Swashbuckle相关NuGet包后,ASP.NET Core API描述的内部获取逻辑发生了变化,导致你原来通过FilterDescriptors检测授权过滤器的方式失效了。

问题根源

在旧版本的Swashbuckle中,通过filterPipeline.Select(filterInfo => filterInfo.Filter)可以直接拿到AuthorizeFilter和IAllowAnonymousFilter,但升级后,这些过滤器的元数据存储方式变了,不再能通过这种方式正确检测到是否需要授权,所以你的代码里的isAuthorized和allowAnonymous判断始终为false,自然不会添加Authorization头参数。

修复方案

修改你的AuthorizationHeaderParameterOperationFilter类,改用EndpointMetadata来检测授权属性,这是更可靠且兼容新版本的方式:

public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        // 改用EndpointMetadata检测是否有Authorize属性
        var isAuthorized = context.ApiDescription.ActionDescriptor.EndpointMetadata
            .Any(m => m is AuthorizeAttribute);
        // 检测是否有AllowAnonymous属性
        var allowAnonymous = context.ApiDescription.ActionDescriptor.EndpointMetadata
            .Any(m => m is AllowAnonymousAttribute);

        if (isAuthorized && !allowAnonymous)
        {
            operation.Parameters ??= new List<OpenApiParameter>();
            operation.Parameters.Add(new OpenApiParameter
            {
                Name = "Authorization",
                In = ParameterLocation.Header,
                Description = "access token",
                Required = true,
                Schema = new OpenApiSchema
                {
                    Type = "string",
                    Default = new OpenApiString("Bearer ")
                }
            });
        }
        if (allowAnonymous)
        {
            operation.Parameters ??= new List<OpenApiParameter>();
            operation.Parameters.Add(new OpenApiParameter
            {
                Name = "Authorization",
                In = ParameterLocation.Header,
                Description = "basic authentication",
                Required = true,
                Schema = new OpenApiSchema
                {
                    Type = "string",
                    Default = new OpenApiString("Basic ")
                }
            });
        }
    }
}

额外注意事项

  • 确保你安装的Swashbuckle.AspNetCore版本和ASP.NET Core 3.1兼容:ASP.NET Core 3.1对应的Swashbuckle版本应该是5.x系列,如果不小心升级到了6.x及以上版本(这些是为.NET 5+设计的),可能会出现更多兼容性问题,建议降级到匹配的版本。
  • 检查你的Startup.cs中是否正确注册了Swagger服务,确保services.AddSwaggerGen()的配置没有遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 12:43:11