Swashbuckle.AspNetCore 10.1.7:OpenApiSecuritySchemeReference能正常工作,但像401这样的响应在Swagger UI中显示为“未记录”
我正在使用 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中的推荐做法,或者是否存在内置的方法,可以自动为像 200、401、403 等标准响应进行文档化。
问题
在Swashbuckle.AspNetCore 10.1.7中,自动文档化端点的标准HTTP响应(尤其是401/403),而无需在每个端点上手动添加 [ProducesResponseType],应采用哪种正确或推荐的方法?
是 IOperationFilter 在这个版本中唯一正确的解决方案吗?
解决方案
无法放在注释里,但它应该是一个统一的方案。
在那里,提问者也在Swagger与认证方面苦恼,那里给出的解决方案是以不同的方式创建需求:
options.AddSecurityRequirement(document =>
{
var requirement = new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
[]
}
};
return requirement;
});
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。