Как мне использовать атрибут HttpGet с несколькими входными параметрами? (и работать с swagger)

#asp.net-web-api #swagger #http-get #swashbuckle

#asp.net-web-api #swagger #http-get #swashbuckle

Вопрос:

Это прекрасно работает с приведенным ниже кодом, у меня есть только один параметр, но как мне выполнить ДВА входных параметра? Если я просто использую [HttpGet], то ни один из параметров не отправляется, хотя он отлично работает вне Swagger. Помогите?

 //[HttpGet]
[Consumes("application/json")]
[HttpGet("{caseId}")]
public ActionResult Get(string caseId, string fileName)
{
    return null;
}
  

Комментарии:

1. это asp.net ядро?

2. почему вы не используете ViewModel вместо этих двух параметров?

3. да, это asp.net ядро

4. Ресурс может быть идентифицирован с помощью CaseID и fileName вместе? Это правильно?

5. Я не уверен, хорошо ли я понял ваш вопрос. Вы хотите, чтобы ваш get метод получал оба параметра и отображал их в Swashbuckle ?

Ответ №1:

Попробуйте использовать атрибуты FromUri или querystring в сигнатуре вашего метода

 [Consumes("application/json")]
[HttpGet("{caseId}")]
public ActionResult Get(string caseId, [FromUri] string fileName)
{
    return null;
}
  

или

 [Consumes("application/json")]
[HttpGet("{caseId}")]
public ActionResult Get(string caseId, [QueryString] string fileName)
{
    return null;
}
  

Теперь это должно быть задокументировано в swagger, показывая, что CaseID является частью маршрута и что имя файла должно быть указано.

Комментарии:

1. Лучше всего использовать ViewModel для чего-либо, кроме одного входного параметра

Ответ №2:

Я просто экспериментировал с этим.

Я обнаружил, что следующий код работает с Swagger:

 [HttpGet("{entityId}/{monthsOfHistory}")]
public async Task<ActionResult<DateTime>> GetAsync([FromRoute] int entityId, [FromRoute] int monthsOfHistory)