2017-06-12 61 views

回答

2

這可以通過添加一個OperationFilter到你的swagger配置來解決。 首先你必須提供一個實現IOperationFilter的類。 Apply方法接收Operation參數,其中包含tag字段中的控制器名稱。當呈現Swagger UI時,將針對API中的每個方法調用Apply方法。你甚至可以爲每個API方法提供單個參數,如Operation還包含operationId

public class AddRequiredHeaderParameter : IOperationFilter 
{ 
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
    { 
     if (operation.parameters == null) 
      operation.parameters = new List<Parameter>(); 

     if (operation.tags[0]?.CompareTo("Example") == 0) 
     { 
      operation.parameters.Add(new Parameter 
      { 
       name = "X-ExampleParam", 
       @in = "header", 
       @default = "42", // optional default value, can be omitted 
       type = "string", 
       description = "My special parameter for the example API", 
       required = true 
      }); 
     } 
     else if (operation.tags[0]?.CompareTo("Whatever") == 0) 
     { 
     // add other header parameters here 
     } 
    } 
} 

在調試器,一個叫ExampleController它看起來像這樣的控制器:

​​

的結果Swagger UI是一個特殊參數,僅適用於我的示例控制器的API: swagger ui showing special parameter

Tell S wagger由SwaggerConfig類的註冊方法添加一行用你OperationFilter:

public class SwaggerConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     var thisAssembly = typeof(SwaggerConfig).Assembly; 

     //GlobalConfiguration.Configuration 
     config 
      .EnableSwagger(c => 
       { 
       ... // omitted some lines here 
       c.OperationFilter<AddRequiredHeaderParameter>(); // Add this line 
       ... // omitted some lines here 
       }) 

    } 

的想法,這個解決方案是基於的沙田的回答是:How to send custom headers with requests in Swagger UI?

相關問題