Swashbuckle.AspNetCore 10.1.7:OpenApiSecuritySchemeReference能正常工作,但像401这样的响应在Swagger UI中显示为“未记录”

后端开发 2026-07-09

我正在使用 Swashbuckle.AspNetCore 版本 10.1.7,搭配.NET的新OpenAPI设置。

我的Swagger安全配置看起来是这样的:

services.AddSwaggerGen(options =>
{
    options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        Name = "Authorization",
        In = ParameterLocation.Header,
        Type = SecuritySchemeType.Http,
        Scheme = "Bearer",
        BearerFormat = "JWT"
    });

    options.AddSecurityRequirement(document => new OpenApiSecurityRequirement
    {
        [new OpenApiSecuritySchemeReference("Bearer", document)] = []
    });
});

这一部分工作正常,Swagger UI中会出现认证按钮。

然而,我在响应文档方面遇到了问题。

当某个端点返回 401 Unauthorized(由于 [Authorize])时,Swagger UI会显示为:

401 – 未文档化

尽管已经强制认证且该端点在未授权时会正确返回401。

我尝试添加 ProducesResponseType,但我希望有一个全局解决方案,而不是在每个控制器/动作上都添加属性。

我也尝试使用一个 IOperationFilter,但不确定这是否是Swashbuckle 10.x中的推荐做法,或者是否存在内置的方法,可以自动为像 200401403 等标准响应进行文档化。

问题

在Swashbuckle.AspNetCore 10.1.7中,自动文档化端点的标准HTTP响应(尤其是401/403),而无需在每个端点上手动添加 [ProducesResponseType],应采用哪种正确或推荐的方法?

IOperationFilter 在这个版本中唯一正确的解决方案吗?

解决方案

无法放在注释里,但它应该是一个统一的方案。

我找到了这篇帖子 https://learn.microsoft.com/en-au/answers/questions/5646974/swagger-addsecurityrequirement-fails-after-migrati

在那里,提问者也在Swagger与认证方面苦恼,那里给出的解决方案是以不同的方式创建需求:

options.AddSecurityRequirement(document =>
{
    var requirement = new OpenApiSecurityRequirement
    {
        {
            new OpenApiSecurityScheme
            {
                Reference = new OpenApiReference
                {
                    Type = ReferenceType.SecurityScheme,
                    Id = "Bearer"
                }
            },
            []
        }
    };
    return requirement;
});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章