相关疑难解决方法(0)

使用ASP.NET Core Web API在Swashbuckle 6(Swagger)中重命名模型

我正在使用Swashbuckle 6(Swagger)和ASP.NET Core Web API.我的模型有DTO作为后缀,例如,

public class TestDTO {
    public int Code { get; set; }
    public string Message { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何在生成的文档中将其重命名为"Test"?我已经尝试添加带有名称的DataContract属性,但这没有帮助.

[HttpGet]
public IActionResult Get() {
  //... create List<TestDTO>
  return Ok(list);
}
Run Code Online (Sandbox Code Playgroud)

c# swagger swashbuckle asp.net-core asp.net-core-webapi

6
推荐指数
1
解决办法
2025
查看次数

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

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)

c# swagger swagger-ui swashbuckle asp.net-core

6
推荐指数
1
解决办法
4668
查看次数