我如何告诉 Swagger 不要在我的输入 class 中显示某些字段作为参数?
How can I tell Swagger to not show certain fields in my input class as parameters?
我有一个 api 应用程序,其中控制器方法采用 class 作为输入。我正在使用 Swagger 向用户显示 class 中有哪些变量。我将 class 用于其他目的,因此对于某些方法,我希望 Swagger 不显示某些对象。我尝试了 here 提到的 [IgnoreDataMember] 属性,但它似乎没有做任何事情。如何防止 Swagger 显示输入中的每个对象 class?
下面是方法定义:
[HttpPost("Receive")]
[Produces("application/json", Type = typeof(APIResponse))]
public APIResponse Receive(MyClass item)
{....}
MyClass 定义了 4 个对象:
public class MyClass
{
[IgnoreDataMember]
public int itemID { get; set; }
[IgnoreDataMember]
public int quantity { get; set; }
public int vendor_id { get; set; }
public string ship_name { get; set; }
}
现在,Swagger 将所有 4 个对象显示为参数:
对于此方法,我只想将 4 个 class 对象中的 2 个显示为参数。对于其他方法,我需要显示全部 4 个。有没有办法做到这一点,或者我需要为每个方法创建一个 class 吗?
默认情况下,Swagger
不准备这样做,如果你想有一个参数,你可以添加一个默认值,如
public void myMethod(string a = "abc", int a = 1)
但是,如果你想完全省略一个参数,你可以这样修改:
添加一个名为 CustomSchemaFilters
的新文件
public class CustomSchemaFilters : ISchemaFilter
{
public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
{
var excludeProperties = new[] {"name", "lastname, "token"};
foreach(var prop in excludeProperties)
if (schema.properties.ContainsKey(prop))
schema.properties.Remove(prop);
}
}
在你的文件中 AppStart/SwaggerConfig.cs
并在同一个文件中添加这一行
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
就在里面:
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{ ...
添加行:
c.SchemaFilter<CustomSchemaFilters>();
我有一个 api 应用程序,其中控制器方法采用 class 作为输入。我正在使用 Swagger 向用户显示 class 中有哪些变量。我将 class 用于其他目的,因此对于某些方法,我希望 Swagger 不显示某些对象。我尝试了 here 提到的 [IgnoreDataMember] 属性,但它似乎没有做任何事情。如何防止 Swagger 显示输入中的每个对象 class?
下面是方法定义:
[HttpPost("Receive")]
[Produces("application/json", Type = typeof(APIResponse))]
public APIResponse Receive(MyClass item)
{....}
MyClass 定义了 4 个对象:
public class MyClass
{
[IgnoreDataMember]
public int itemID { get; set; }
[IgnoreDataMember]
public int quantity { get; set; }
public int vendor_id { get; set; }
public string ship_name { get; set; }
}
现在,Swagger 将所有 4 个对象显示为参数:
对于此方法,我只想将 4 个 class 对象中的 2 个显示为参数。对于其他方法,我需要显示全部 4 个。有没有办法做到这一点,或者我需要为每个方法创建一个 class 吗?
默认情况下,Swagger
不准备这样做,如果你想有一个参数,你可以添加一个默认值,如
public void myMethod(string a = "abc", int a = 1)
但是,如果你想完全省略一个参数,你可以这样修改:
添加一个名为 CustomSchemaFilters
的新文件public class CustomSchemaFilters : ISchemaFilter
{
public void Apply(Schema schema, SchemaRegistry schemaRegistry, Type type)
{
var excludeProperties = new[] {"name", "lastname, "token"};
foreach(var prop in excludeProperties)
if (schema.properties.ContainsKey(prop))
schema.properties.Remove(prop);
}
}
在你的文件中 AppStart/SwaggerConfig.cs
并在同一个文件中添加这一行
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
就在里面:
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{ ...
添加行:
c.SchemaFilter<CustomSchemaFilters>();