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

.NET Core下Swashbuckle请求时Authorization头为空问题咨询

解决Swashbuckle中Swagger UI请求Authorization头为空的问题

嘿,我之前也碰到过一模一样的问题!Postman能正常传授权头,但Swagger UI发起请求时就是拿不到Authorization的值,核心原因就是Swagger UI默认不会自动帮你把授权头加到请求里,得手动配置一下。

下面是具体的解决步骤:

1. 在SwaggerGen中配置安全定义和全局授权要求

你需要在services.AddSwaggerGen的配置里,添加Bearer Token的安全定义,并且让所有API端点都应用这个授权规则。代码示例如下:

services.AddSwaggerGen(c =>
{
    // 保留你原有的Swagger配置,比如文档标题、版本等
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "Your API", Version = "v1" });

    // 第一步:添加Bearer类型的安全定义
    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Description = "请输入格式为 `Bearer {Token}` 的授权头",
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.ApiKey,
        Scheme = "Bearer"
    });

    // 第二步:添加全局安全要求,让所有端点都需要这个授权头
    c.AddSecurityRequirement(new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            Array.Empty<string>()
        }
    });
});

这段代码的作用是告诉Swagger UI:我们的API需要通过Authorization头传递Bearer Token,并且所有接口都需要这个授权。

2. 在Swagger UI中完成授权操作

配置完之后重启项目,打开localhost/swagger页面,你会看到右上角多了一个Authorize按钮。点击它,在弹出的对话框里输入你的授权Token(注意格式要正确,比如Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...),然后点击Authorize完成授权。

之后再发起请求,Swagger UI就会自动把你输入的Token放到Authorization请求头里,此时断点里的Request.Headers["Authorization"]就能取到正确的值了!

额外排查点

如果按上面的步骤做了还是不行,可以检查这几个地方:

  • 确认Token格式正确:必须包含Bearer 前缀,和你在Postman里使用的格式完全一致
  • 检查自定义中间件:有没有中间件在Swagger请求时修改或移除了Authorization头,调整中间件的执行顺序试试
  • 核对路由匹配:确保Swagger里显示的接口路由和你代码里的端点路由完全一致,避免请求没命中正确的接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:48:24