私はswashbuckleを使用して、webapi2プロジェクトのスワッガードキュメンテーション\ UIを生成しています。私たちのモデルはいくつかのレガシーインターフェースと共有されているので、モデルで無視したいプロパティがいくつかあります。従来のインターフェースもJSONにシリアライズする必要があるため、JsonIgnore属性を使用することはできません。スワッシュバックル設定だけで、プロパティをグローバルに無視したくないためです。モデルのプロパティを無視するようにスワッシュバックルを設定するには
私はここに文書化され、これを行う方法が見つかりました:
https://github.com/domaindrivendev/Swashbuckle/issues/73
をしかし、これは現在のSwashbuckleリリースで期限が切れように見えます。次のように
Swashbuckleの古いバージョンのために推奨される方法は、IModelFilter実装を使用している:
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>());
をしかし、私は、現在のバージョンでIModelFilterを使用するようにSwashbuckleを設定する方法がわからないんですか?私はSwashbuckle 5.5.3を使用しています。 httpConfiguration.EnableSwagger
を呼び出すときに、次のように私はこのSchemaFilterを使用するようにSwaggerDocsConfig
を設定し、その後
public class ApplyCustomSchemaFilters : ISchemaFilter
{
public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
{
var excludeProperties = new[] {"myProp1", "myProp2", "myProp3"};
foreach(var prop in excludeProperties)
if (schema.properties.ContainsKey(prop))
schema.properties.Remove(prop);
}
}
:
することができますに実際にJsonIgnoを使用するスワッガーにプロパティを表示しないようにしてください。 –
質問で述べたように、私はモデルを使用する必要があるレガシーコードを持っているのでJsonIgnoreを使いたくありません。レガシーコード... – mutex