在ASP.NET Framework Web API中,我成功地通过两种不同的方式在UI上添加了Bearer令牌,并使其正常工作。
方式1:
添加操作过滤器。创建以下类:
public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null)
{
operation.parameters = new List<Parameter>();
}
operation.parameters.Add(new Parameter
{
name = "Authorization",
@in = "header",
description = "access token",
required = false,
type = "string",
@default = "Bearer "
});
}
}
现在在SwaggerConfig.cs中添加以下内容:
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
})
.EnableSwaggerUi(c =>
{
});
第二种方式:
我们也可以使用DocumentFilter来遍历所有操作并添加标题,在下面的方法中,我们跳过了第一次获取用户名和密码以及生成令牌的操作:
public class SwaggerPathDescriptionFilter : IDocumentFilter
{
private string tokenUrlRoute = "Auth";
private Dictionary<HeaderType, Parameter> headerDictionary;
private enum HeaderType { TokenAuth };
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
CreateHeadersDict();
var allOtherPaths = swaggerDoc.paths.Where(entry => !entry.Key.Contains(tokenUrlRoute))
.Select(entry => entry.Value)
.ToList();
foreach (var path in allOtherPaths)
{
AddHeadersToPath(path, HeaderType.TokenAuth);
}
}
private void AddHeadersToPath(PathItem path, params HeaderType[] headerTypes)
{
if (path.parameters != null)
{
path.parameters.Clear();
}
else
{
path.parameters = new List<Parameter>();
}
foreach (var type in headerTypes)
{
path.parameters.Add(headerDictionary[type]);
}
}
private void CreateHeadersDict()
{
headerDictionary = new Dictionary<HeaderType, Parameter>();
headerDictionary.Add(HeaderType.TokenAuth, new Parameter()
{
name = "Authorization",
@in = "header",
type = "string",
description = "Token Auth.",
required = true,
@default = "Bearer "
});
}
}
然后我们需要在SwaggerConfig.cs中注册它:
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.DocumentFilter<SwaggerPathDescriptionFilter>();
})
.EnableSwaggerUi(c =>
{
});
现在我们将在Swagger UI的头部中看到令牌输入,如下所示:
![enter image description here](https://istack.dev59.com/oVSnz.webp)
EnableApiKeySupport()
方法定义在哪里?我正在使用最新的 Swashbuckle(v5.4.0),但我没有看到它...? - urigSwaggeruiConfig
的一个方法,应该在c.EnableSwaggerUi()
中设置。 - urig