ASP.NET Маршрутизация Web API, проще говоря, — это процесс сопоставления запросов клиента с соответствующими действиями. В статье «ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings» я столкнулся с настановкой маршрутов через шаблоны, конвенции и HTTP-методы, и преимущество этого подхода в том, что шаблоны маршрутизации равномерно размещены в классе WebApiConfig в папке App_Start, что удобно для управления, но недостаток в том, что он недостаточно гибок.
REST воспринимает всё как ресурс, и иногда ресурс с дочерними ресурсами, такие как Customer и Orders, может захотеть ввести запрос вроде customers/1/orders, но это сложно добиться только по конвенции. На самом деле, ASP.NET Web API предоставляет нам функцию Route, которую можно напрямую подключить к Action, что очень гибко и интуитивно понятно в использовании.
Давайте посмотрим, как использовать функцию маршрута в ASP.NET MVC4.
Разрешить атрибут Route
Сначала нужно настроить это в WebApiConfig.
Вышеуказанный метод MapHttpAttributeRoutes доступен только в новых версиях ASP.NET Web APIЕсли ваша версия относительно низкая, вы можете удалить старую версию и установить последнюю через консоль NuGet Package Manager.
Далее, в Global.asax, вам нужно прокомментировать оригинальный способ регистрации WebApiConfig и принять новый метод, следующим образом:
В этот момент при запуске проекта может быть обнаружена следующая ошибка:
Это связано с тем, что при скачивании последней версии ASP.NET Web API я также скачал последнюю версию icrosoft. AspNet.WebApi.HelpPage。 Вы можете удалить последнюю версию HelpPage и скачать старую версию.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Использовать свойство маршрута
Создайте класс Кусомтера.
Создайте класс Order.
Создайте класс базы данных, чтобы получить коллекцию Order.
Создайте пустой контроллер API, написанный следующим образом:
Введите следующее в браузере:
Если вы используете ASP.NET MVC4 для разработки, при первом запуске программы может возникнуть следующая ошибка:
[A] System.WebPages.Razor.Configuration.HostSection не может быть транслирован в [B]System.Web.WebPages.Razor.Configuration.HostSection. Тип A производится от «System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35» (в «C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ в контексте «Default») System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Тип B производится из «System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35» (в контексте «Default» в «C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Временные ASP.NET файлы/vs/feb7ce97/a525d58a/asse
Это связано с тем, что последняя версия Razor используется при загрузке последней версии ASP.NET Web API. Вам нужно настроить следующую конфигурацию в корневом каталоге Web.config:
Используйте функцию RoutePrefix
Если вы хотите префиксировать все действия в контроллере API, можно установить функцию RoutePrefix на контроллер API.
Например, мы хотим, чтобы она была в таком формате: http://localhost/api/customers/1/orders
Модифицируйте OrdersController таким образом.
Вы также можете использовать ~ в функции Маршрут, чтобы отменить префиксные правила действия.
Префикс, определённый особенностью RoutePrefix, также может иметь параметрические переменные:
Ограничения маршрутизации
Вы можете ограничить параметрические переменные в маршруте с помощью «{parameter variable name: constraint}».
Выше, если идентификатор переменной фрагмента относится к типу int, он маршрутизируется к первому Действию, а если нет — к второму Действию.
ASP.NET Встроенные ограничения Web API включают:
{x:alpha} ограничивает заглавные и строчные буквы {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} ограничивает диапазон длин {x:long} {x:maxlength(10)} {x:min(10)} {x:диапазон(10,50)} {x:regex(regex)}
Вы можете одновременно задавать несколько ограничений для переменной параметра:
Реализуйте интерфейс IHttpRouteConstraint для настройки правил ограничений. Реализуйте ограничение, которое не может быть 0.
Зарегистрируйте пользовательское ограничение в WebApiConfig в папке App_Start.
Используйте пользовательские ограничения.
Опциональные параметры и их значения по умолчанию
Если переменная параметра маршрутизации необязательна, параметру также необходимо присваивать значение по умолчанию.
Добавьте ? после ограничения, чтобы указать опциональное, и установите значение по умолчанию для id в параметрах метода.
Задайте название маршруту
Приоритет маршрутизации
Приоритет маршрута, установленный свойством Route, определяется на основе условностей и свойства RouteOrder.
Конвенции следующие:
1. Статические фрагментные переменные 2. Фрагментные переменные с ограничениями 3. Фрагментирующие переменные без ограничений 4. Переменная с ухоженным фрагментом с ограничениями 5. Неограниченные переменные фрагмента джокера
Значение свойства RouteOrder по умолчанию равно 0, и чем меньше оно свойство, тем выше.
Выше порядок приоритета маршрутизации следующий:
переменная статического фрагмента orders/details, значение свойства RouteOrder равно 0 orders/{id} с ограниченными фрагментными переменными значения 0 в свойстве RouteOrder orders/{customerName} — это фрагментная переменная без ограничений, а значение свойства RouteOrder равно 0 orders/{*date} — это переменная wildcard fragment со значением 0 в свойстве RouteOrder заказы/ожидающие значения свойства RouteOrder равны 1
|