Я только начал использовать ASP.NET Web API 2.1 и столкнулся с ограничением. Используя маршрутизацию атрибутов, я могу делать следующее:
[Route("item/{id:int}")]
public IHttpActionResult GetItem(int id)
{
...
}
URL /item/5
будет перенаправлен на это действие, а URL /item/abc
- нет из-за ограничения int
в {id:int}
.
Я попытался изменить свой URL-адрес так, чтобы параметр id
был в строке запроса вместе с его ограничением, несмотря на то, что использование ограничений маршрута для параметров запроса никогда не упоминалось и не демонстрировалось в документации.
[Route("item?{id:int}")]
public IHttpActionResult GetItem(int id)
{
...
}
Если я попытаюсь запустить сейчас, я получаю сообщение об ошибке при вызове метода Configure
в Application_Start
.
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
Сообщение следующее.
ArgumentException не было обработано пользовательским кодом
Шаблон маршрута не может начинаться с символа '/' или '~' и не может содержать '?' персонаж.
Меня беспокоят две вещи.
Во-первых, раздел, документирующий префиксы маршрутов в MSDN, дает понять, что размещение символа ~
в начале шаблона маршрута вполне допустимо. Я попробовал, и он работает, как указано в документации.
Во-вторых, если это не так, как я могу наложить ограничение маршрута на параметр запроса? Рассмотрим следующее, сняв ограничение маршрута.
[Route("item")]
public IHttpActionResult GetItem(int id)
{
...
}
URL /item/5
будет перенаправлен на это действие с id
, установленным на 5
, но также будет URL /item/abc
с id
, установленным на 0
.
Нет ли способа наложить ограничение маршрута на параметр запроса?