我如何告诉 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>();