Ograniczenia routingowe
ASP.NET Core możesz przekazywać zmienne na URL-ach poprzez definiowanie szablonów routingu oraz podawać domyślne, opcjonalne i ograniczenia dla zmiennych.
Ograniczenie jest używane przez dodanie określonej nazwy ograniczenia do ścieżki atrybutu, która jest używana w następujący sposób:
Niektóre ograniczenia są już zawarte w ramach, w następujący sposób:
Ograniczenia | przykład | Przykłady meczów | Ilustrują | int | {id:int} | 123456789, -123456789 | Dopasuj dowolną liczbę całkowitą | Bool | {active:bool} | prawda, FAŁSZYWA | Dopasowanie prawda lub fałsz (rozróżnienie wielkości liter) | Datetime | {dob:datetime} | 2016-12-31, 2016-12-31 19:32 | Pasuje do ważnych wartości DateTime (w stałej lokalizacji – zobacz ostrzeżenie) | Dziesiętny | {cena:dziesiętny} | 49.99, -1,000.01 | Pasuje do ważnych wartości dziesiętnych (w stałej lokalizacji – patrz ostrzeżenie) | podwójne | {weight:double} | 1.234, -1,001.01e8 | Dopasowuje ważne wartości podwójne (w stałej lokalizacji – patrz ostrzeżenie) | Pływanie | {weight:float} | 1.234, -1,001.01e8 | Pasuje do ważnych wartości float (w stałej lokalizacji – zobacz ostrzeżenia) | GUID | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Dopasowuje ważne wartości GUID | długie | {tik:long} | 123456789, -123456789 | Pasuje do ważnych wartości długich | długość minlength (wartość) | {username:minlength(4)} | Rick | Ciąg musi mieć co najmniej 4 znaki | maxlength(value) | {filename:maxlength(8)} | Richard | Ciągi znaków nie mogą przekraczać 8 znaków | Długość(długość) | {filename:length(12)} | somefile.txt | Ciąg musi mieć dokładnie 12 znaków | długość (min,max) | {filename:length(8,16)} | somefile.txt | Ciąg musi mieć co najmniej 8 znaków i nie więcej niż 16 znaków | min(value) | {wiek:min(18)} | 19 | Wartość całkowita musi wynosić co najmniej 18 | max(value) | {wiek:max(120)} | 91 | Wartość całkowita nie może przekraczać 120 | Zakres (minimum, maks) | {wiek:zakres(18,120)} | 91 | Wartość całkowita musi wynosić co najmniej 18 i nie przekraczać 120 | alfa | {name:alpha} | Rick | Ciąg musi składać się z jednego lub więcej znaków alfabetycznych (a-z, na wielka litera). | regex(expression) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | Ciąg musi odpowiadać wyrażeniu regularnemu (zobacz wskazówki dotyczące definiowania wyrażeń regularnych) | Wymagane | {name:required} | Rick | Używany do wymuszania obecności wartości nieparametrycznych podczas generowania URL |
Wbudowane ograniczenia działają w większości najczęstszych przypadków użycia, ale czasem nadal musimy dostosować efekt, jaki chcemy.
Ograniczenia niestandardowego routingu
Niestandardowym ograniczeniem jest implementacja interfejsu IRouteConstraint, a następnie przeciążenie metody Match, która ma cztery parametry.
Pierwszy parametr, httpContext, to kontekst bieżącego żądania
Drugi parametr, trasa, to trasa, do której należy aktualne ograniczenie
Trzeci parametr, routeKey, to nazwa aktualnie sprawdzanej zmiennej, na przykład id w przykładzie na początku artykułu Czwartym parametrem jest wartość słownikowa, którą aktualny URL odpowiada, na przykład trasa przykładu na początku artykułu; jeśli URL to users/1, to istnieje słownik z key = id , value = 1. Oczywiście są też wartości innych zmiennych, takich jak kontroler, akcja itd.
Piąty parametr, routeDirection, to wyliczona wartość reprezentująca, czy adres URL jest żądany przez stronę internetową, czy generowany metodą taką jak Url.Action.
Na przykład chcemy zdefiniować ograniczenie, które określa, że parametry przekazywane przez trasę muszą być określoną wartością enumeracyjną.
Najpierw zdefiniujmy enum:
Następnie zdefiniuj ograniczenia:
Dodaj niestandardowe ograniczenia do metody ConfigureServices w Startup.cs:
Wykorzystanie ograniczeń na trasach:
(WebApplicationTest to obecna przestrzeń nazw)
{id:int:min(2)} trasa musi używać min(2), w przeciwnym razie wystąpi konflikt dla id = 0 lub id = 1.
Uruchom program i dopasuj nasze niestandardowe ograniczenia, gdy trasy to api/test/0, api/test/1, api/test/true oraz api/test/false.
Jeśli trasa to api/test/{liczba całkowita większa niż 2}, dopasuj drugą trasę.
Inne przypadki odpowiadają trzeciej trasie.
konkluzja
Ograniczenia routingu są bardzo przydatną funkcją w niektórych scenariuszach, co może zmniejszyć parametry kontrolne w kontrolerze, a funkcję częściowej walidacji parametrów można zaimplementować za pomocą deklaratywnego attruibute, a niektóre duplikaty sprawdzające można wyodrębnić do ograniczeń do użytku publicznego.
Konstruktor ograniczenia może być wstrzykiwany, dzięki czemu jest bardzo rozszerzalny, a część weryfikacji parametrów można wykonać poprzez zapytanie do bazy danych.
Oficjalna strona internetowa tylko krótko wspomina o ograniczeniach routingu, a ten artykuł zawiera konkretne przykłady ich zastosowania.
|