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

Вид: 16017|Відповідь: 1

[.NET Core] ASP.NET Реалізація власних маршрутних обмежень у Core

[Копіювати посилання]
Опубліковано 06.05.2019 09:30:30 | | |
Обмеження маршрутизації

ASP.NET Core ви можете передавати змінні на URL, визначаючи шаблони маршрутизації, а також надавати параметри за замовчуванням, опціонали та обмеження для змінних.

Обмеження використовується шляхом додавання заданої назви обмеження до маршруту атрибута, яке використовується наступним чином:

Деякі обмеження вже передбачені всередині фреймворку, а саме:

Обмеження
приклад
Приклади матчів
Ілюстрації
int
{id:int}
123456789, -123456789
Зрівняти будь-яке ціле число
буль
{active:bool}
правда, НЕПРАВДА
Відповідати правді чи хибні (з ремістру)
ДатаЧас
{dob:datetime}
2016-12-31, 2016-12-31 19:32
Збігається з дійсними значеннями DateTime (у фіксованій локації — див. попередження)
Десяткова
{ціна:десяткова}
49.99, -1,000.01
Відповідає дійсним десятковим значенням (у фіксованій локальності — див. попередження)
Подвійний
{вага:подвійна}
1.234, -1,001.01e8
Збігається з дійсними подвійними значеннями (у фіксованій локації — див. попередження)
Поплавок
{вага:плаває}
1.234, -1,001.01e8
Збігається з дійсними значеннями float (у фіксованій локації — див. попередження)
GUID
{id:guid}
CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638}
Збігається з дійсними значеннями GUID
довгий
{цокає:довго}
123456789, -123456789
Відповідність дійсним довгим значенням
minlength(значення)
{ім'я користувача:minlength(4)}
Рік
Рядок має складатися щонайменше з 4 символів
maxlength(значення)
{ім'я файлу:maxlength(8)}
Річард
Рядки не повинні перевищувати 8 символів
Довжина(довжина)
{ім'я файлу:довжина(12)}
somefile.txt
Рядок має складатися точно з 12 символів
Довжина(min,max)
{ім'я файлу:довжина(8,16)}
somefile.txt
Рядок повинен складатися щонайменше з 8 символів і не більше 16 символів
min(значення)
{вік:min(18)}
19
Ціле значення має бути не менше 18
max(значення)
{вік:макс(120)}
91
Ціле значення не повинно перевищувати 120
Дальність(мінімум,максимум)
{вік:діапазон(18,120)}
91
Ціле значення має бути не менше 18 і не перевищувати 120
альфа
{ім'я:Альфа}
Рік
Рядок має складатися з одного або кількох алфавітних символів (a-z, чутливий до ремінстру).
Regex(вираз)
{ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)}
123-45-6789
Рядок має відповідати регулярному виразу (див. поради щодо визначення регулярних виразів)
необхідний
{ім'я:обов'язково}
Рік
Використовується для забезпечення наявності непараметричних значень під час генерації URL


Вбудовані обмеження працюють для більшості поширених випадків використання, але іноді нам все ж потрібно налаштувати бажаний ефект.
Власні обмеження маршрутизації

Власне обмеження — реалізувати інтерфейс IRouteConstraint і потім перевантажити метод Match, який має чотири параметри.

Перший параметр, httpContext, є контекстом поточного запиту

Другий параметр, маршрут, — це маршрут, до якого належить поточне обмеження

Третій параметр, routeKey, — це ім'я змінної, яка наразі перевіряється, наприклад, id у прикладі на початку статті
Четверте значення параметра — це словникове значення, яке відповідає поточному URL, наприклад, маршрут прикладу на початку статті; якщо URL user/1, то існує словник з ключем = id , значенням = 1. Звісно, існують також значення для інших змінних, таких як контролер, дія тощо.

П'ятий параметр, routeDirection, — це перелічене значення, яке показує, чи запитується URL вебом, чи генерується методом, таким як Url.Action.

Наприклад, ми хочемо визначити обмеження, яке визначає, що параметри, передані маршрутом, мають відповідати заданому значенням перелічення.

Спочатку визначимо енум:


Тоді визначте обмеження:

Додайте власні обмеження до методу ConfigureServices у Startup.cs:
Використання обмежень на маршрутах:

(WebApplicationTest — це поточний простір назв)


{id:int:min(2)} маршрут повинен використовувати min(2), інакше виникне конфлікт для id = 0 або id = 1.

Запусти програму і підібрати наші власні обмеження, коли маршрути — api/test/0, api/test/1, api/test/true та api/test/false.

Якщо маршрут api/test/{ціле число більше 2}, зрівняйте другий маршрут.

Інші випадки відповідають третьому маршруту.

висновок

Обмеження маршрутизації є дуже корисною функцією в деяких сценаріях, які можуть зменшити параметри перевірки в контролері, а функцію часткової валідації параметрів можна реалізувати за допомогою декларативного attruibute, а деякі дублікатні перевірки можна витягти у обмеження для публічного використання.

Конструктор обмеження можна впровадити, тож він може бути дуже розширюваним, а також деяку перевірку параметрів можна здійснити шляхом запиту до бази даних.

Офіційний вебсайт лише коротко згадує обмеження маршрутизації, а ця стаття наводить конкретні приклади їх використання.





Попередній:Zero Foundation C# (повнокольорова версія) Tomorrow Technology
Наступний:ASP.NET Core – Razor View Імпорт Опис використання
 Орендодавець| Опубліковано 06.05.2019 09:32:15 |
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com