ASP.NET routing API web, mówiąc wprost, to proces mapowania żądań klienta na odpowiadające mu Akcje. W artykule "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings" doświadczyłem ustawiania tras przez szablony, konwencje i metody HTTP, a zaletą tego podejścia jest to, że szablony routingu są równomiernie umieszczone w klasie WebApiConfig pod folderem App_Start, co jest wygodne dla zarządzania, ale wadą jest to, że nie jest wystarczająco elastyczne.
REST traktuje wszystko jak zasób, a czasem zasób z zasobami potomnymi, takimi jak Klient i Zamówienia, może chcieć wprowadzić żądanie takie jak klienci/1/zamówienia, ale trudno jest osiągnąć tę drogę wyłącznie konwencjonalnie. W rzeczywistości ASP.NET Web API oferuje nam funkcję Route, którą można bezpośrednio połączyć z Action, co jest bardzo elastyczne i intuicyjne w obsłudze.
Sprawdźmy, jak korzystać z funkcji Trasy w ASP.NET MVC4.
Pozwól na atrybut Route
Najpierw musisz skonfigurować to w WebApiConfig.
Powyższa metoda MapHttpAttributeRoutes jest dostępna tylko w nowszych wersjach ASP.NET Web APIJeśli twoja wersja jest stosunkowo niska, możesz odinstalować starą wersję i zainstalować najnowszą przez konsolę Menedżera Pakietów NuGet.
Następnie w Global.asax musisz skomentować oryginalny sposób rejestracji WebApiConfig i przyjąć nową metodę, w następujący sposób:
W tym momencie uruchamianie projektu może zgłaszać następujący błąd:
Dzieje się tak, ponieważ pobierając najnowszą wersję ASP.NET Web API, pobrałem też najnowszą wersję icrosoft. AspNet.WebApi.HelpPage。 Możesz odinstalować najnowszą wersję HelpPage i pobrać starszą.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Użyj właściwości Route
Stwórz klasę Cusomtera.
Stwórz klasę Order.
Utwórz klasę Database, aby pobrać kolekcję Order.
Stwórz pusty kontroler API napisany tak:
Wpisz następujące w swojej przeglądarce:
Jeśli używasz ASP.NET MVC4 do programowania, możesz otrzymać następujący błąd podczas pierwszego uruchomienia programu:
[A] System.Web.WebPages.Razor.Configuration.HostSection nie może być przesyłany do [B]System.Web.WebPages.Razor.Configuration.HostSection. Typ A pochodzi od "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (w "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ w kontekście "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Typ B pochodzi od "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (w kontekście "Default" w "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Tymczasowe ASP.NET pliki/vs/feb7ce97/a525d58a/asse
Dzieje się tak, ponieważ najnowsza wersja Razora jest używana podczas pobierania najnowszej wersji API Web API ASP.NET. Musisz skonfigurować następującą konfigurację w katalogu głównym Web.config:
Użyj funkcji RoutePrefiks
Jeśli chcesz zamontować wszystkie Akcje w kontrolerze API, możesz umieścić funkcję RoutePrefix na kontrolerze API.
Na przykład chcemy, aby był w formacie takim: http://localhost/api/customers/1/orders
Zmodyfikuj OrdersController w ten sposób.
Możesz także użyć ~ w funkcji Route, aby nadpisać zasady prefiksu Action.
Prefiks zdefiniowany przez funkcję RoutePrefix może również zawierać zmienne parametrów:
Ograniczenia routingowe
Możesz ograniczać zmienne parametrów w trasie za pomocą "{parameter variable name: constraint}".
Powyżej, jeśli id zmiennej fragmentu jest typu int, jest kierowany do pierwszej Akcji, a jeśli nie, to do drugiej Akcji.
ASP.NET Wbudowane ograniczenia API webowego obejmują:
{x:alpha} ogranicza wielkie i małe litery {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:length(6)} {x:length(1,20)} ogranicza zakres długości {x:long} {x:maxlength(10)} {x:min(10)} {x:range(10,50)} {x:regex(regex)}
Możesz ustawić wiele ograniczeń dla zmiennej parametrów jednocześnie:
Zaimplementuj interfejs IHttpRouteConstraint do dostosowania reguł ograniczeń. Zaimplementuj ograniczenie, które nie może być 0.
Zarejestruj niestandardowe ograniczenie w WebApiConfig w folderze App_Start.
Używaj niestandardowych ograniczeń.
Parametry opcjonalne i ich wartości domyślne
Jeśli zmienna parametru routingu jest opcjonalna, parametr ten również musi otrzymać wartość domyślną.
Dodaj ? po ograniczeniu, aby wskazać opcjonalnie, i ustaw domyślną wartość id w parametrach metody.
Nadaj trasie nazwę
Priorytet trasowania
Priorytet trasy określony przez właściwość Route jest określany na podstawie konwencji oraz właściwości RouteOrder.
Konwencje są następujące:
1. Statyczne zmienne fragmentów 2. Zmienne fragmentacyjne z ograniczeniami 3. Zmienne fragmentacyjne bez ograniczeń 4. Zmienna fragmentów dziki z ograniczeniami 5. Nieograniczone zmienne fragmentów dzikich kart
Domyślna wartość właściwości RouteOrder wynosi 0, a im mniejsza wartość właściwości, tym wyższa.
Powyżej, kolejność priorytetu routingu jest następująca:
statyczna zmienna fragmentów orders/details, wartość właściwości RouteOrder wynosi 0 orders/{id} z ograniczonymi zmiennymi fragmentami o wartości 0 w właściwości RouteOrder orders/{customerName} to zmienna fragmentaryczna bez ograniczeń, a wartość właściwości RouteOrder wynosi 0 orders/{*date} to zmienna fragmentów wildcard o wartości 0 w właściwości RouteOrder zlecenia/oczekujące wartości właściwości RouteOrder 1
|