Jus*_*olf 8 swashbuckle asp.net-core
我正在使用 Swashbuckle.AspNetCore 5.0.0 为我的 .Net Core WebApi 项目生成 Swagger 文档,并且在大多数情况下,一切正常。
我已经使用 ApiKey 设置了一些简单的身份验证,效果很好。
我现在遇到问题的地方是让 Swagger 将 ApiKey 添加到我的请求标头中。我按照说明添加了 ApiKey 安全定义/要求,如这些不同的帖子中所述:
Swashbuckle.AspNetCore 请求的空授权标头
如何强制 Swagger/Swashbuckle 附加 API 密钥?
但是,ApiKey 值永远不会添加到 Header 中。
这就是我在启动时所拥有的:
c.AddSecurityDefinition("ApiKey",
new OpenApiSecurityScheme
{
Description = "ApiKey must appear in header",
Type = SecuritySchemeType.ApiKey,
Name = Constants.ApiKeyHeaderName,
In = ParameterLocation.Header
});
Run Code Online (Sandbox Code Playgroud)
和
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Name = Constants.ApiKeyHeaderName,
Type = SecuritySchemeType.ApiKey,
In = ParameterLocation.Header
},
new List<string>()}
});
Run Code Online (Sandbox Code Playgroud)
Paw*_*cki 15
我自己一直在努力解决这个问题,但发现除了添加适当的引用之外,您还必须在定义中指定方案,这是正确为我工作的代码:
c.AddSecurityDefinition("ApiKey", new OpenApiSecurityScheme()
{
Name = "x-api-key",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Description = "Authorization by x-api-key inside request's header",
Scheme = "ApiKeyScheme"
});
var key = new OpenApiSecurityScheme()
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "ApiKey"
},
In = ParameterLocation.Header
};
var requirement = new OpenApiSecurityRequirement
{
{ key, new List<string>() }
};
c.AddSecurityRequirement(requirement);
Run Code Online (Sandbox Code Playgroud)
好的,我终于能够让它发挥作用了。我需要将 OpenApiReference 的实例添加到提供给 c.AddSecurityRequirement() 的 OpenApiSecurityScheme 对象
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "ApiKeyAuth" }
Run Code Online (Sandbox Code Playgroud)
我不得不说这方面的文档有点令人困惑。可能不是一小部分,因为互联网上发布的任何内容都永远存在,而且由于框架的变化,我发现的关于整个事情的许多帖子不再适用:)
现在我只需要弄清楚如何发送另一个标头值以及 api-key,我将完成这部分
| 归档时间: |
|
| 查看次数: |
3334 次 |
| 最近记录: |