[Swagger] 在 Swagger UI 新增自订 Header

先定义一个 Attribute

[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]public class HeaderAttribute : Attribute{    public string Name { get; set; }     public string Type { get; set; }     public object[] EnumValues { get; set; }     public bool Required { get; set; }     public object Default { get; set; }}

依照需求,把挂在 Action 上

public class ValuesController : ApiController{    [Header(Name = "Header1", Type = "string", EnumValues = new object[] {1, 2, 3}, Default = "2")]    public IEnumerable<string> Get()    {        return new[] {"value1", "value2"};    }}

实作 IOperationFilter,用来把 Action 上面的 HeaderAttribute,放到Operation.parameters

public class HeaderFilter : IOperationFilter{    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)    {        var headers = apiDescription.ActionDescriptor.GetCustomAttributes<HeaderAttribute>();        if (!headers.Any())        {            return;        }         if (operation.parameters == null)        {            operation.parameters = new List<Parameter>();        }         foreach (var header in headers)        {            var parameter = new Parameter            {                name = header.Name,                @in = "header",                type = header.Type,                @enum = header.EnumValues?.ToList(),                required = header.Required,                @default = header.Default            };            operation.parameters.Add(parameter);        }    }}

在 SwaggerConfig.cs 里面套用

c.OperationFilter<HeaderFilter>();

参考来源:

https://github.com/domaindrivendev/Swashbuckle/issues/501


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章