Маршрутизация атрибутов веб-API ASP.net с помощью int и string - PullRequest
1 голос
/ 06 июня 2019

Это должно быть быстро. У меня есть два маршрута:

[HttpGet]
[Route("{id}")]
[ResponseType(typeof(Catalogue))]
public IHttpActionResult Get(string id) => Ok(_catalogueService.Get(id));

И

[HttpGet]
[Route("{numberOfResults:int}")]
[ResponseType(typeof(IEnumerable<Catalogue>))]
public IHttpActionResult List(bool active, int numberOfResults) => Ok(_catalogueService.List(active, numberOfResults));

Когда я использую почтальон, чтобы попытаться перечислить мои каталоги, я передаю что-то вроде этого

/ каталоги / 10

И я ожидаю, что в моем контроллере будет использоваться метод List. Точно так же, если я хочу Получить каталог, я передаю что-то вроде этого:

/ каталоги / AB100

Мои маршруты работали, но недавно я изменил метод List (я добавил активный bool), и теперь мои маршруты не работают должным образом. Оба приведенных выше примера фиксируются методом Get, который неверен.

Есть ли способ исправить эту проблему?

1 Ответ

1 голос
/ 06 июня 2019

Добавьте значение по умолчанию для active и поместите его после параметра numberOfResults в качестве необязательного параметра.

[HttpGet]
[Route("{numberOfResults:int}")]
[ResponseType(typeof(IEnumerable<Catalogue>))]
public IHttpActionResult List(int numberOfResults, bool active = true) => //assuming active default
    Ok(_catalogueService.List(active, numberOfResults));

Из-за дополнительного обязательного параметра active он больше не будет соответствовать исходному перегруженному маршруту по умолчанию, поскольку он будет ожидать, что active будет частью URL, даже если он не находится в маршруте. шаблон.

Как

/catalogues/10?active=true

Если сделать этот параметр необязательным, это означает, что теперь он может соответствовать ожидаемому поведению, как и раньше, со значением active, предоставленным действию, когда оно опущено в URL

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