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

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

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


person Timothy Shields    schedule 05.02.2014    source источник
comment
Я не пробовал, но регулярные выражения. Я использовал эту статью: feedproxy. google.com/~r/TypeCastException/~3/0OVZG5c2bY0/ и, похоже, допускает ограничения.   -  person celerno    schedule 06.02.2014
comment
@celerno Спасибо, но это для MVC, а не для веб-API.   -  person Timothy Shields    schedule 06.02.2014


Ответы (1)


Согласно https://web.archive.org/web/20131109124834/http://attributerouting.net/ (), это невозможно:

«Осторожно! Из-за проблем с интеграцией со структурой Web API WebHost следующие функции не будут работать:…

  • ограничения параметра строки запроса,… "

) Обратите внимание, что этот ответ был написан для предыдущей версии веб-API, где маршрутизация атрибутов выполнялась с использованием отдельного _ 1_ Пакет NuGet. Маршрутизация атрибутов с тех пор была включен в ядро ​​веб-API. Тем не менее, похоже, что ограничения на параметры строки запроса по-прежнему не поддерживаются из коробки.

person Michael Skarum    schedule 05.02.2014
comment
Да, извините за бесполезный ответ, это был бы способ дать определение. - person Michael Skarum; 06.02.2014
comment
Да, думаю, Microsoft взяла на себя проект и не хотела отдельный домен. Думаю, сегодня вы можете больше узнать о маршрутизации атрибутов здесь: asp.net/web-api/overview/web-api-routing-and-actions/ - person Michael Skarum; 03.03.2016