Ограничения маршрута параметров запроса

Я только начал использовать 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.

Нет ли способа наложить ограничение маршрута на параметр запроса?

Ответы на вопрос(1)

Ваш ответ на вопрос