Swagger генерирует неверный URL для словаря в ASP .CORE 3 - PullRequest
0 голосов
/ 27 января 2020

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 для типа ввода словаря?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...