J'ai cherché des façons possibles d'ajouter un paramètre d'en-tête de demande qui serait ajouté automatiquement à toutes les méthodes de mon web-api
, mais je ne pouvais pas en trouver une claire.
En cherchant, j'ai trouvé que la méthode OperationFilter()
doit faire quelque chose à ce sujet.
Oui, vous pouvez le faire en héritant de IOperationFilter
Vous pouvez trouver la réponse sur GitHub ici: AddRequiredHeaderParameter
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<IParameter>();
operation.Parameters.Add(new NonBodyParameter
{
Name = "X-User-Token",
In = "header",
Type = "string",
Required = false
});
}
}
Ensuite, accédez à votre fichier SwaggerConfig.cs
et ajoutez les éléments suivants dans la section AddSwaggerGen
:
c.OperationFilter<AddRequiredHeaderParameter>();
Reconstruisez et profitez.
Je devais faire cela légèrement différent, je ne sais pas pourquoi. Voici ce que j'ai fait pour ajouter une valeur d'en-tête:
Cela a été ajouté à ma configuration de swagger
c.OperationFilter<AddRequiredHeaderParameter>();
Et c'était la classe:
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, OperationFilterContext context)
{
operation.Parameters.Add(new NonBodyParameter
{
Name = "X-MYHEADER",
In = "header",
Type = "string",
Required = false
});
}
}
Vous pouvez également avoir une classe de modèle de base et utiliser l'attribut [FromHeader] pour les propriétés qui doivent être envoyées dans des en-têtes personnalisés. Quelque chose comme ça:
public class AuthenticatedRequest
{
[FromHeader(Name = "User-Identity")]
public string UserIdentity { get; set; }
}
Au moins, cela fonctionne bien pour ASP.NET Core 2.1 et Swashbuckle.AspNetCore 2.5.0.