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:
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:
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?