Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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, і вона дуже гнучка та інтуїтивно зрозуміла у використанні.

Давайте спробуємо, як користуватися функцією Route у 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


Використати властивість Route

Створіть клас Кусомтера.


Створіть клас Order.

Створіть клас бази даних, щоб отримати колекцію Order.



Створіть порожній контролер API, написаний так:


Введіть у браузері наступне:

Якщо ви використовуєте ASP.NET MVC4 для розробки, ви можете отримати таку помилку при першому запуску програми:

[A] System.Web.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.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


Якщо хочете додати всі Actions у API-контролер, можна встановити функцію RoutePrefix на контролер API.

Наприклад, ми хочемо, щоб це було у такому форматі: http://localhost/api/customers/1/orders


Модифікувати OrdersController таким чином.


Ви також можете використовувати ~ у функції Маршрут, щоб перезаписати префіксні правила Дії.



Префікс, визначений ознакою RoutePrefix, також може містити змінні параметрів:


Обмеження маршрутизації

Ви можете обмежити змінні параметрів у маршруті за допомогою «{ім'я змінної параметра: обмеження}».


Вище, якщо id змінної фрагмента є типом int, вона маршрутизується до першої дії, а якщо ні — до другої дії.

ASP.NET Вбудовані обмеження Web API включають:

{x:alpha} обмежує великі та малі літери
{x:bool}
{x:datetime}
{x:decimal}
{x:double}
{x:float}
{x:guid}
{x:int}
{x:довжина(6)}
{x:length(1,20)} обмежує діапазон довжин
{x:long}
{x:maxlength(10)}
{x:min(10)}
{x:range(10,50)}
{x:regex(regex)}


Ви можете одночасно встановити кілька обмежень для змінної параметра:

Реалізуйте інтерфейс IHttpRouteConstraint для налаштування правил обмежень. Реалізуйте обмеження, яке не може бути 0.


Зареєструйте власне обмеження у WebApiConfig у папці App_Start.


Використовуйте власні обмеження.


Опціональні параметри та їхні значення за замовчуванням

Якщо змінна параметра маршрутизації є необов'язковою, параметру також потрібно надати значення за замовчуванням.


Додати ? після обмеження вказати опціонально, і встановити значення за замовчуванням id у параметрах методу.

Встановіть назву маршруту



Пріоритет маршрутизації

Пріоритет маршруту, встановлений властивістю Route, визначається на основі конвенцій та властивості RouteOrder.

Конвенції такі:

1. Статичні фрагментні змінні
2. Фрагментні змінні з обмеженнями
3. Фрагментні змінні без обмежень
4. Змінна фрагмента дикого карти з обмеженнями
5. Необмежені змінні wildcard фрагментів

Значення за замовчуванням властивості 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