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 - Открытый API v3 - не будет привязан к «Условиям»
/services/records?Page=0&Count=5&UserId=1
Пользовательский URL - работает как ожидается и инициализирует «Условия» с помощью { "UserId", "1" }
/services/records?Page=0&Count=5&Conditions[UserId]=1
Вопрос
Как заставить Swagger отображать URL-адрес, например PropertyName[Key]=Value
, для свойства типа Dictionary?
Альтернативный вопрос
Не решение, но если я определю значение по умолчанию для своего входного параметра таким образом, Swagger создаст правильный URL.
{
"Conditions[UserId]": "1",
"Conditions[GroupId]": "2"
}
Теперь URL-адрес правильный и правильно привязан к модели
/services/records?Page=0&Count=5&Conditions[UserId]=1&Conditions[GroupId]=2
Есть ли способ изменить значение по умолчанию, отображаемое в Swagger для типа ввода словаря?