c# - 如何告诉 Swagger 不要将输入类中的某些字段显示为参数?
问题描述
我有一个 api 应用程序,其中控制器方法将类作为输入。我正在使用 Swagger 向用户展示该类中有哪些变量。我将该类用于其他目的,因此对于某些方法,我希望 Swagger 不显示某些对象。我尝试了这里提到的属性 [IgnoreDataMember] ,但它似乎没有做任何事情。如何防止 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 个。有没有办法做到这一点,或者我需要为每个方法创建一个类?
解决方案
默认情况下,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>();
推荐阅读
- scala - 如何实现 Akka 演员工厂?
- javascript - 如何遍历具有数组的对象并对值求和?
- javascript - 如何使用 laravel 内置的 Gmail 验证系统发送验证电子邮件
- regex - 构建一个字符串,排除包含两个特定单词的文本
- mysql - 有没有关于这个 PyMysql/Mysql 行为的文档?
- javascript - 带有 datepicker.js 的 ToDoList 保存本地存储
- arrays - 如何在 Swift 5 中使用 typeAlias 将双字典添加到数组中
- php - 如何正确重新排序来自 HTML 的 POST 数组?
- django - 如何将 models.IntegerField() 转换为整数?
- azure-devops - 用于测试/运行天蓝色 DevOps API 查询的 HTTP GET 中的日期格式