Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 21930|Ответ: 1

[WebAPI] Определение свойств маршрута веб-API

[Скопировать ссылку]
Опубликовано 28.04.2018 10:37:11 | | | |
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






Предыдущий:Ведите учет того, что можно оплатить кредитной картой
Следующий:Невозможно предоставить процесс для ADO.NET с фиксированным именем «MySql.Data.MySqlClient»...
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com