Comment configurer Swashbuckle ignorer propriété sur le modèle
Je suis l'aide de Swashbuckle pour générer swagger documentation\INTERFACE utilisateur pour un webapi2 projet. Nos modèles sont partagés avec certaines interfaces héritage donc, il ya un couple de propriétés à ignorer les modèles. Je ne peux pas utiliser JsonIgnore attribut parce que l'héritage d'interfaces également besoin de sérialiser en JSON, donc je ne veux pas ignorer les propriétés à l'échelle mondiale, dans la Swashbuckle de configuration.
J'ai trouvé une méthode de faire ce documentée ici:
https://github.com/domaindrivendev/Swashbuckle/issues/73
Mais cela semble être hors de date avec le courant de Swashbuckle libération.
La méthode recommandée pour l'ancienne version de Swashbuckle est à l'aide d'un IModelFilter mise en œuvre comme suit:
public class OmitIgnoredProperties : IModelFilter
{
public void Apply(DataType model, DataTypeRegistry dataTypeRegistry, Type type)
{
var ignoredProperties = … //use reflection to find any properties on
//type decorated with the ignore attributes
foreach (var prop in ignoredProperties)
model.Properties.Remove(prop.Name);
}
}
SwaggerSpecConfig.Customize(c => c.ModelFilter<OmitIgnoredProperties>());
Mais je n'en suis pas sûr comment configurer Swashbuckle d'utiliser le IModelFilter dans la version actuelle? Je suis l'aide de Swashbuckle 5.5.3.
Comme mentionné dans la question, je ne veux pas utiliser JsonIgnore comme je l'ai hérité de code qui doit également utiliser les modèles, et si je demande JsonIgnore qui affectera swagger et le code héritage...
OriginalL'auteur mutex | 2016-12-06
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de le faire, mais sans l'aide de JsonIgnore (peut-être que vous avez encore besoin de sérialiser/désérialiser la propriété) puis il suffit de créer un attribut personnalisé.
Ensuite un schéma de filtre similaire à Johng de l'
N'oubliez pas d'enregistrer le filtre
Swashbuckle.AspNetCore.SwaggerGen.ISchemaFilter ne dispose pas d'un paramètre de type. Comment le résoudre?
J'ai posté un montage qui permet de travailler sur les dernières dotnetcore.
J'ai couru dans un problème à l'aide de cette solution avec de la casse. Mes noms de propriété de mon POCOs étaient en PascalCase alors que l'objet sérialisé son nom en camelCase, donc au lieu de ContainsKey, peut être une bonne idée de vérifier var foundKey = schéma.les propriétés.Les touches.FirstOrDefault(x => string.Est égal à(x, excludedProperty.Nom, StringComparison.CurrentCultureIgnoreCase));
C'est un outil très utile de répondre. J'ai publié une version mise à jour de ci-dessous qui: fonctionne sur la dernière version (v5) version de Swashbuckle, il peut être appliqué à des domaines ainsi que les propriétés; respecte le possible changement de nom des membres de données par le
JsonProperty
attribut. Merci!!!!OriginalL'auteur Richard
Si vous marquez le terrain/propriété
internal
ouprotected
ouprivate
, il sera ignoré automatiquement par swashbuckle à swagger de la documentation.Cela empêcherait la propriété de se rempli à partir du corps de la requête json
OriginalL'auteur Jay Shah
Bien, avec un peu de piquer j'ai trouvé un moyen de faire cela à l'aide de ISchemaFilter:
puis lors de l'appel de
httpConfiguration.EnableSwagger
j'ai mis leSwaggerDocsConfig
pour utiliser cette SchemaFilter comme suit:Espère que cela aide quelqu'un. Je serais toujours curieux de savoir s'il est possible d'utiliser la IModelFilter en quelque sorte.
OriginalL'auteur mutex
La
AspNetCore
solution ressemble:Cela n'a pas fonctionné pour moi parce que mon schéma est Pascal boîtier, mais le contexte semble être à l'aide de chameau cas.
Modifié la réponse stackoverflow.com/a/53319609/1768
Ont mis à jour ci-dessous pour travailler avec la dernière version (v5) version de Swashbuckle, de traiter également des champs, également à traiter avec terrain/propriété renomme l'aide de la
JsonProperty
attribut.OriginalL'auteur Stef Heyenrath
Le code ci-dessous est très largement basé sur @Richard réponse, mais je suis de l'inclure comme une nouvelle réponse, car elle a trois nouvelles fonctionnalités utiles que j'ai ajouté:
SwaggerIgnore
attribut pour être appliquée à des champs n'est pas juste pour les propriétésJsonProperty
attributDe sorte que le code révisé est:
et dans
Startup.cs
:Comme pour plusieurs autres réponses ci-dessus, je pense que la différence dans les classes requises pour cette version vs @Richard version est à faire avec .NET de Base vs-Cadre, pas Swagger v5 vs v4. Si quelqu'un en avait besoin, il serait relativement facile de convertir les autres fonctionnalités de cette version la .NET Framework classes.
OriginalL'auteur Mike Beaton
Voici ce que j'ai utilisé avec Newtonsoft.Json.JsonIgnoreAttribute:
OriginalL'auteur johng
(Basé sur la réponse de mutex.)
J'ai ajouté une autre ligne pour ne pas avoir des problèmes avec
NullReferenceException
.Si vous souhaitez supprimer tous les schémas
OriginalL'auteur Álvaro Blázquez Sarabia
Pour les gens comme moi qui sont à l'aide de .Net de Base et sont à l'aide de la construire dans
app.UseSwaggerUi3WithApiExplorer()
Utilisation
[JsonIgnore]
balise à l'aide de Newtonsoft.Json;Il sera exclu de votre documentation.
OriginalL'auteur Jorben Saaltink
Basé sur Stef Heyenrath de réponse.
Attribut pour marquer les propriétés d'exclure de l'Arrogance de la documentation.
Le filtre pour exclure les propriétés de l'Arrogance de la documentation.
La
schema.Properties.Keys
sontcamelCase
, tandis que les propriétés se sontPascalCase
. Modifié la méthode pour convertir en minuscules et comparer pour voir ce qui doit être exclu.ToCamelCase
méthode copié à partir de Swashbuckle, et prend également en charge à l'exclusion des champs et des propriétés, et aussi la possibilité de bien renommer à l'aide deJsonProperty
.OriginalL'auteur mattruma