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
Създай клас Cusomter.
Създай клас 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.Web.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
Ако искаш да префиксираш всички действия в API контролер, можеш да сложиш функцията RoutePrefix на API контролера.
Например, искаме да е във формат като следния: http://localhost/api/customers/1/orders
Модифицирай OrdersController по този начин.
Можете също да използвате ~ във функцията Маршрут, за да отмените правилата на префикса на действието.
Префиксът, дефиниран от функцията RoutePrefix, може също да има параметрични променливи:
Ограничения за маршрутизиране
Можете да ограничите параметричните променливи в маршрут чрез "{име на променлива на параметра: ограничение}".
По-горе, ако идентификаторът на фрагментната променлива е от тип int, той се маршрутизира към първото действие, а ако не е – към второто действие.
ASP.NET Вградените ограничения на уеб API включват:
{x:alpha} ограничава главни и малки букви {x:bool} {x:datetime} {x:decimal} {x:double} {x:float} {x:guid} {x:int} {x:length(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. Неограничени променливи на уайлдкард фрагменти
По подразбиране стойността на свойството RouteOrder е 0, и колкото по-малка е стойността на свойството, толкова по-висока е.
По-горе, редът на приоритет при маршрутизиране е:
orders/details статична фрагментна променлива, стойността на свойството RouteOrder е 0 orders/{id} с ограничени фрагментни променливи със стойност 0 в свойството RouteOrder orders/{customerName} е фрагментна променлива без ограничения, а стойността на свойството RouteOrder е 0 orders/{*date} е променлива с уайлдкард фрагмент със стойност 0 в свойството RouteOrder поръчки/чакаща стойност на свойството RouteOrder е 1
|