是否可以在 Swagger UI 中为输入模型属性指定不同的名称,而不使用 FromQuery?

Ian*_*emp 6 c# swagger swagger-ui swashbuckle asp.net-core

public class InputModel
{
    public string Thing { get; set; }
    public DateTime AnotherThing { get; set; }
}

public ThingController : ControllerBase
{
    public Task DoTheThing([FromQuery] int foo, [FromQuery] InputModel input)
    {
        // Elided.
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当为此控制器生成 Swagger 文档时,会列出以下输入DoTheThing

foo:int
事物:字符串
AnotherThing:日期时间

请注意最后两个输入如何以大写字母开头,因为这就是它们在模型中的定义方式。我希望它们以小写开头,以便与传递给控制器​​方法的非复杂参数保持一致(请记住,ASP.NET 模型绑定不关心大小写)。

执行此操作的简单方法是在模型上以小写字母开头命名这些属性,或者在它们上应用FromQueryand/orFromBody属性。我不想做这两件事,因为前者太令人讨厌了,而后者正在将行为应用于属性,而当我需要根据具体情况应用该行为时。

理想情况下,我希望能够编写如下内容(目前不起作用,因为 Swashbuckle 似乎不知道/关心DisplayNameDisplay属性):

public class InputModel
{
    [DisplayName("thing")]
    public string Thing { get; set; }
    [DisplayName("anotherThing")]
    public DateTime AnotherThing { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,我对任何允许我“重命名”模型属性而不更改其名称的解决方案感到满意。

我看过 Swashbuckle.AspNetCore.Annotations 但它似乎没有提供此功能。

Ian*_*emp 5

要强制所有参数均为小写,请使用名称明显但文档记录很少的DescribeAllParametersInCamelCase方法:

services.AddSwaggerGen(o =>
{
    ...
    o.DescribeAllParametersInCamelCase();
    ...
});
Run Code Online (Sandbox Code Playgroud)

(这最终有点像一个 XY 问题,因为我想要的是一种强制所有参数被描述为小写的方法,但找不到方法来做到这一点,所以我要求一种修改参数名称的通用方法.)