[英]Add Bearer token option in swagger for particular version in web api
I am using Swagger in the Web API application.我在 Web API 应用程序中使用 Swagger。 I have multiple versions of API, but I want to apply Bearer token option to version 2 only.
我有多个版本的 API,但我只想将不记名令牌选项应用于版本 2。 There is no authentication for both versions.
两个版本都没有身份验证。 Here is my code:
这是我的代码:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API", Version = "v2" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
Type = SecuritySchemeType.ApiKey,
});
});
Another way of solving this, I assume you have a prefix for controller version v1 as prefix, then what you can do is:解决这个问题的另一种方法,我假设你有一个 controller 版本 v1 的前缀作为前缀,那么你可以做的是:
public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
if (context.ApiDescription.RelativePath.StartsWith("v2"))
{
operation.Parameters.Add(new OpenApiParameter()
{
@In = ParameterLocation.Header,
Description =
"JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
Name = "Authorization",
});
}
}
}
and use it并使用它
services.ConfigureSwaggerGen(options =>
{
options.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
});
This will only add Bearer field to v2 end points.这只会将 Bearer 字段添加到 v2 端点。
You can install NSwag.AspNetCore and add different options with different versions.您可以安装NSwag.AspNetCore并添加不同版本的不同选项。
services.AddSwaggerDocument(a =>
{
a.DocumentName = "v1";
a.Version = "v1";
});
services.AddSwaggerDocument(a =>
{
a.DocumentName = "v2";
a.Version = "v2";
a.AddSecurity("bearer", new NSwag.OpenApiSecurityScheme
{
Description = "jwt",
In = NSwag.OpenApiSecurityApiKeyLocation.Header,
Type = NSwag.OpenApiSecuritySchemeType.ApiKey,
Scheme = "bearer"
});
});
app.UseOpenApi();
app.UseSwaggerUi3();
You can read more about it in Microsoft Docs .您可以在Microsoft Docs中阅读有关它的更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.