Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 16017|Отговор: 1

[.NET Core] ASP.NET Имплементация на персонализирани маршрутизиращи ограничения в Core

[Копирай линк]
Публикувано в 6.05.2019 г. 9:30:30 ч. | | |
Ограничения за маршрутизиране

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

Ограничението се използва чрез добавяне на зададеното име на ограничение към маршрута на атрибута, което се използва по следния начин:

Някои ограничения вече са предоставени в рамките на рамката, както следва:

Ограничения
пример
Примери за съвпадения
илюстрирам
int
{id:int}
123456789, -123456789
Съвпадение на всяко цяло число
bool
{active:bool}
вярно, НЕВЯРНО
Съвпадение на вярно или невярно (чувствително от регистри)
Datetime
{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(стойност)
{filename:maxlength(8)}
Ричард
Низовете не трябва да надвишават 8 знака
Дължина(дължина)
{filename:length(12)}
somefile.txt
Низът трябва да е точно 12 знака
Дължина(min,max)
{filename:length(8,16)}
somefile.txt
Низът трябва да има поне 8 знака и не повече от 16 знака
min(стойност)
{възраст:мин(18)}
19
Цяло число трябва да е поне 18
max(стойност)
{възраст:макс(120)}
91
Целото число не трябва да надвишава 120
обхват(min,max)
{възраст:диапазон(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 адресът е users/1, тогава има речник с ключ = id , стойност = 1. Разбира се, има и стойности за други променливи, като controller, action и др.

Петият параметър, 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/{integer по-голямо от 2}, съпоставете втория маршрут.

Други случаи са свързани с третия път.

извод

Ограниченията за маршрутизиране са много полезна функция в някои сценарии, които могат да намалят параметрите за проверка в контролера, а функцията на валидиране на частични параметри може да се реализира чрез декларативен атруибут, а някои дублиращи проверки могат да бъдат извлечени в ограничения за публична употреба.

Конструкторът на ограничението може да бъде инжектиран, така че може да бъде много разшириваем, а известна проверка на параметрите може да се извърши чрез заявка към базата данни.

Официалният уебсайт споменава ограниченията за маршрутизиране само накратко, а тази статия предоставя конкретни примери за използването на маршрутизиращи ограничения.





Предишен:Zero Foundation C# (Пълноцветна версия) Tomorrow Technology
Следващ:ASP.NET Core – Razor View Import Описание на употреба
 Хазяин| Публикувано в 6.05.2019 г. 9:32:15 ч. |
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com