0
votes

Ignorer la propriété de l'interface utilisateur Swagger

J'essaie d'ignorer la propriété sur l'interface utilisateur swagger. basé sur cet article, j'ai implémenté un filtre et essayé

public class SequenceSetupListModel
{
    public int Id { get; set; }
    public int Sequence { get; set; }
    public string Role { get; set; }
    public string User { get; set; }
    [SwaggerExclude]
    public IList<Sequence> SequenceLists { get; set; }
}
  1. L'attribut personnalisé ne semble pas être correctement obtenu par réflexion. Les excludedProperties toujours vides.
  2. context.MemberInfo lit la propriété mais ne peut pas la supprimer du schema.Properties car il n'y a aucune propriété

mon exemple de modèle est comme

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class SwaggerExcludeAttribute : Attribute
{
}

public class SwaggerExcludeFilter : ISchemaFilter
{
    public void Apply(OpenApiSchema schema, SchemaFilterContext context)
    {
        if (schema?.Properties == null || context == null) return;
        var excludedProperties = context.Type.GetProperties()
            .Where(t => t.GetCustomAttribute(typeof(SwaggerExcludeAttribute), true) != null);
        foreach (var excludedProperty in excludedProperties)
        {
            if (schema.Properties.ContainsKey(excludedProperty.Name))
                schema.Properties.Remove(excludedProperty.Name);
        }
    }
}

Ce qui me manque ici

Cordialement


2 commentaires

Comment utilisez-vous ce modèle? C'est pour réponse ou demande?


@RomanMarusyk J'utilise pour la demande. pour l'une des méthodes post


3 Réponses :


2
votes

Vous n'avez pas réellement besoin de définir son propre attribut pour les modèles de demande. Si vous utilisez Json.NET, utilisez [JsonIgnore]


6 commentaires

Oui je sais ça mais je veux juste savoir pourquoi ça ne marche pas


J'utilise 5.2.1


Pourquoi pensez-vous que votre code ne fonctionne pas? excludedProperties peut être vide pour certains contrôleurs. Exécutez-le simplement sans débogage et voyez si SequenceLists est toujours dans Swagger. Votre code fonctionne bien dans mon projet par défaut


ça n'a pas marché. ça montre. Je me demande comment ça marche sur toi?


Êtes-vous sûr que votre code est le même que dans la question? Vous avez écrit: "context.MemberInfo lit" mais il n'y a pas de tel code. Montrez l'écran de votre modèle dans swagger


ça le fait quand même j'ai abandonné je vais avec JsonIgnore merci pour la réponse



0
votes

À tous ceux qui se demandent pourquoi [JsonIgnore] ne fonctionne pas, c'est parce que vous ne pouvez pas utiliser la version de la bibliothèque Newtonsoft sur .net core 3.x. Vous devez utiliser le package nuget System.Text.Json. https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/README.md#systemtextjson-stj-vs-newtonsoft


0 commentaires

0
votes

Il existe l'attribut [OpenApiIgnore] dans l'espace de noms NSwag.Annotations pour AspNetCore. Il semble fonctionner sur une classe ou une méthode et les exclut du document Swagger généré. Vous devrez inclure le package NSwag.AspNetCore de NuGet.


0 commentaires