Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15484
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2018-12-19 17:30
文章分类

全部博文(8)

文章存档

2018年(8)

我的朋友

分类: Html/Css

2018-12-20 19:57:05

用Swagger UI 进行测试时,预设是没有Header 可以用,当API 需要用到Header,要自己手动处理一下,让Swagger UI 提供画面让开发人员调试

先定义一个Attribute



点击(此处)折叠或打开

  1. [ AttributeUsage ( AttributeTargets . Method, AllowMultiple = true ) ]
  2. public class HeaderAttribute : Attribute
  3. {
  4.     public string Name { get ; set ; }
  5.  
  6.     public string Type { get ; set ; }
  7.  
  8.     public object [] EnumValues { get ; set ; }
  9.  
  10.     public bool Required { get ; set ; }
  11.  
  12.     public object Default { get ; set ; }
  13. }

依照需求,把挂在Action 上

点击(此处)折叠或打开

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

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

点击(此处)折叠或打开

  1. public class HeaderFilter : IOperationFilter
  2. {
  3.     public void Apply ( Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription )
  4.     {
  5.         var headers = apiDescription . ActionDescriptor . GetCustomAttributes< HeaderAttribute > () ;
  6.          if ( ! headers . Any () )
  7.         {
  8.             return ;
  9.          }
  10.  
  11.         if ( operation . parameters == null )
  12.         {
  13.             operation . parameters = new List < Parameter > () ;
  14.          }
  15.  
  16.         foreach ( var header in headers )
  17.         {
  18.             var parameter = new Parameter
  19.             {
  20.                 name = header . Name,
  21.                 @in = "header" ,
  22.                 type = header . Type,
  23.                 @enum = header . EnumValues? . ToList () ,
  24.                 required = header . Required,
  25.                 @default = header . Default
  26.              } ;
  27.             operation . parameters . Add ( parameter ) ;
  28.          }
  29.     }
  30. }

在SwaggerConfig.cs 里面套用 

点击(此处)折叠或打开

  1. c . OperationFilter< HeaderFilter > ()

阅读(518) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~