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; } }
excludedProperties
toujours vides.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
3 Réponses :
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]
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
À 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
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.
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