2017-06-12 2 views

Répondre

2

Cela peut être résolu en ajoutant un OperationFilter à votre configuration swagger. Vous devez d'abord fournir une classe qui implémente IOperationFilter. La méthode Apply reçoit un paramètre Operation qui contient le nom du contrôleur dans le champ tag. Lorsque l'interface utilisateur Swagger est rendue, la méthode Apply est appelée pour chaque méthode dans l'API. Vous pouvez même fournir des paramètres individuels pour chaque méthode API, comme Operation contient également les 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 
     } 
    } 
} 

Dans le débogueur, avec un contrôleur nommé ExampleController il ressemble à ceci:

debug output

Le résultat en l'interface utilisateur Swagger est un paramètre spécial qui est uniquement appliqué à l'API de mon contrôleur d'exemple: swagger ui showing special parameter

Dites à S Wagger vous utilisez OperationFilter en ajoutant une ligne dans la méthode Register de la classe SwaggerConfig:

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 
       }) 

    } 

L'idée de cette solution est basée sur la réponse de Shatin: How to send custom headers with requests in Swagger UI?