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 似乎不知道/关心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)
但是,我对任何允许我“重命名”模型属性而不更改其名称的解决方案感到满意。
我看过 Swashbuckle.AspNetCore.Annotations 但它似乎没有提供此功能。
要强制所有参数均为小写,请使用名称明显但文档记录很少的DescribeAllParametersInCamelCase方法:
services.AddSwaggerGen(o =>
{
...
o.DescribeAllParametersInCamelCase();
...
});
Run Code Online (Sandbox Code Playgroud)
(这最终有点像一个 XY 问题,因为我想要的是一种强制所有参数被描述为小写的方法,但找不到方法来做到这一点,所以我要求一种修改参数名称的通用方法.)
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |