我有一个api应用程序,其中控制器方法将类作为输入。我正在使用Swagger向用户显示该类中的变量。我把这个类用于其他目的,所以对于某些方法,我希望Swagger不要显示某些对象。我尝试了[IgnoreDataMember]提到的here属性,但似乎没有做任何事情。如何防止Swagger显示输入类中的每个对象?
所以这是方法定义:
[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个类对象中的2个作为参数。对于其他方法,我需要显示所有4.有没有办法做到这一点,还是我需要为每个方法创建一个类?
答案 0 :(得分:1)
默认情况下,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>();