swagger 怎么显示enum_dotnet core swagger filter 隐藏接口和显示枚举描述

本文介绍了如何在Dotnet Core 2.2项目中使用Swagger UI,并展示了如何通过`HiddenApiAttribute`过滤器隐藏指定接口,以及通过`EnumDocumentFilter`添加枚举描述。`HiddenApiFilter`类用于从Swagger文档中移除标记了`HiddenApi`特性的控制器或方法。同时,`EnumDocumentFilter`类用于在Swagger文档中为枚举类型添加描述信息,使API文档更易理解。
摘要由CSDN通过智能技术生成

dotnet core 2.2开发项目中,常会使用Swagger UI来生成在线Api文档。

某些接口不想放到Swagger中可以这样写Filter:

/// /// 隐藏swagger接口特性标识

///

[System.AttributeUsage(System.AttributeTargets.Method | System.AttributeTargets.Class)]

public partial class HiddenApiAttribute : System.Attribute { }

/// /// 隐藏接口,不生成到swagger文档展示

///

public class HiddenApiFilter : IDocumentFilter

{

/// /// 过滤器

///

///

///

public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)

{

foreach (ApiDescription apiDescription in context.ApiDescriptions)

{

if (apiDescription.TryGetMethodInfo(out MethodInfo method))

{

if (method.ReflectedType.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute))

|| method.CustomAttributes.Any(t => t.AttributeType == typeof(HiddenApiAttribute)))

{

string key = "/" + apiDescription.RelativePath;

if (key.Contains("?"))

{

int idx = key.IndexOf("?", System.StringComparison.Ordinal);

key = key.Substring(0, idx);

}

swaggerDoc.Paths.Remove(key);

}

}

}

}

}

注意:他不能隐藏一个Controller中的某个Method,比如仅隐藏Post或Get方法,因为它是对路由Paths.Remove

Starts.cs中加入代码:

c.DocumentFilter();

Controller类或某个方法加入代码:

[HiddenApi]

public class ValuesController : ControllerBase

{

...

}

显示枚举描述

/// /// Add enum value descriptions to Swagger

///

public class EnumDocumentFilter : IDocumentFilter

{

///

public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)

{

// add enum descriptions to result models

foreach (var schemaDictionaryItem in swaggerDoc.Definitions)

{

var schema = schemaDictionaryItem.Value;

foreach (var propertyDictionaryItem in schema.Properties)

{

var property = propertyDictionaryItem.Value;

var propertyEnums = property.Enum;

if (propertyEnums != null && propertyEnums.Count > 0)

{

property.Description += DescribeEnum(propertyEnums);

}

}

}

}

private static string DescribeEnum(IEnumerableenums)

{

var enumDescriptions = new List();

Type type = null;

foreach (var enumOption in enums)

{

if (type == null) type = enumOption.GetType();

enumDescriptions.Add($"{Convert.ChangeType(enumOption, type.GetEnumUnderlyingType())} = {Enum.GetName(type, enumOption)},{GetDescription(type, enumOption)}");

}

return $"{Environment.NewLine}{string.Join(Environment.NewLine, enumDescriptions)}";

}

public static string GetDescription(Type t, object value)

{

foreach (MemberInfo mInfo in t.GetMembers())

{

if (mInfo.Name == t.GetEnumName(value))

{

foreach (Attribute attr in Attribute.GetCustomAttributes(mInfo))

{

if (attr.GetType() == typeof(DescriptionAttribute))

{

return ((DescriptionAttribute)attr).Description;

}

}

}

}

return string.Empty;

}

}

Starts.cs中加入代码:

c.DocumentFilter();

以上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值