web-dev-qa-db-fra.com

Web Api Comment ajouter un paramètre d'en-tête pour toutes les API dans Swagger

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. 

9
user2245758

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.

16
Ramy Mohamed

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
            });
        }
    }
3
Mr Giggles

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.

0
Victor Sharovatov