当从查询字符串中提取的模型具有字典作为其属性之一时,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; }
}
Swagger UI在查询模型上显示“条件”属性的这种格式
{
"UserId": "string",
"GroupId": "string",
"RecordId": "string"
}
Swagger 生成的 URL - Open API v2 - 不会绑定到“条件”
/services/records?Page=0&Count=5&Conditions={"UserId":"1"}
Swagger 生成的 URL - Open API v3 - 不会绑定到“条件”
/services/records?Page=0&Count=5&UserId=1
自定义 URL - 按预期工作并初始化“条件”{ "UserId", "1" }
/services/records?Page=0&Count=5&Conditions[UserId]=1
问题
如何强制 Swagger 为PropertyName[Key]=Value
Dictionary 类型的属性呈现 URL?
替代问题
不是解决方案,但如果我以这种方式为输入参数定义默认值,Swagger 会创建正确的 URL。
{
"Conditions[UserId]": "1",
"Conditions[GroupId]": "2"
}
URL 现在正确并正确绑定到模型
/services/records?Page=0&Count=5&Conditions[UserId]=1&Conditions[GroupId]=2
有没有办法更改 Swagger 中显示的字典输入类型的默认值?