当从查询字符串中提取的模型将字典作为其属性之一时,Swagger 会生成不正确的 URL。如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成?尝试使用 Swashbuckle 和 NSwag。
控制器
public class RecordsController : ControllerBase
{
[HttpGet]
[Route("services/records")]
public async Task<IActionResult> Records([FromQuery] QueryModel queryModel)
{
return null;
}
}
输入模型 - 查询字符串
public class QueryModel
{
public int Page { get; set; }
public int Count { get; set; }
public Dictionary<Columns, string> Conditions { get; set; }
}
招摇的用户界面显示查询模型上“条件”属性的这种格式
{
"UserId": "string",
"GroupId": "string",
"RecordId": "string"
}
Swagger 生成的 URL - 开放 API v2- 不受“条件”约束
/services/records?Page=0&Count=5&Conditions={"UserId":"1"}
Swagger 生成的 URL - 开放 API v3- 不受“条件”约束
/services/records?Page=0&Count=5&UserId=1
自定义网址- 按预期工作并初始化“条件”{ "UserId", "1" }
/services/records?Page=0&Count=5&Conditions[UserId]=1
Question
如何强制 Swagger 呈现 URLPropertyName[Key]=Value
对于字典类型的属性?
另类问题
这不是一个解决方案,但如果我以这种方式为输入参数定义默认值,Swagger 会创建正确的 URL。
{
"Conditions[UserId]": "1",
"Conditions[GroupId]": "2"
}
URL 现在正确并且已正确绑定到模型
/services/records?Page=0&Count=5&Conditions[UserId]=1&Conditions[GroupId]=2
有没有办法更改 Swagger 中显示的字典输入类型的默认值?