我正在使用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) 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 似乎不知道/关心DisplayName或Display属性):
public class InputModel
{
[DisplayName("thing")]
public string Thing { get; set; }
[DisplayName("anotherThing")]
public DateTime AnotherThing { get; set; …Run Code Online (Sandbox Code Playgroud)