Ограничения маршрута параметров запроса
Я только начал использовать ASP.NET Web API 2.1 и столкнулся с ограничением. Используя Attribute Routing, я могу сделать следующее:
[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
.
Нет ли способа наложить ограничение маршрута на параметр запроса?