Restful Routing for ASP.NET MVC, baseret på Ruby on Rails routing DSL. Det utliserer HTTP verber til at holde unikke stier til et minimum, mens optimere din controllere struktur.

PM > Installer – pakke RestfulRouting

velkommen til Restful Routing for ASP.NET MVC! Routing er uden tvivl kernen i alle ASP.Net MVC applikationer. At styre ruter selv kan være besværligt, frustrerende og uproduktivt. Nogle udviklere bruger en catch-all rute, hvilket kan føre til uventede problemer, da applikationen vokser. Restful Routing løser routingstyringsproblemet ved at give en meningsfuld grænseflade til registrering af ruter.

vi håber du finder ud af, at dette bibliotek er så let at bruge, at du vil undre dig over, hvordan du nogensinde har udviklet dig ASP.Net MVC applikationer uden det.

Golden Seven

Restful Routing er baseret på ideen om Resources og De Gyldne syv handlinger:

handling HTTP-metode
indeks
Vis
Opret indlæg
nyt
Rediger
opdatering sæt
ødelæg slet

formålet med Restful Routing er at gøre dig bevidst om dine controllere. Mens du måske bøjer reglerne, når det er relevant, bør du virkelig fokusere på at holde alle controllere begrænset til disse syv handlinger. Hvis du bekæmper konventionerne om afslappende Routing, du vil ikke udnytte styrken af vores meningsfulde rammer og være elendig ved at gøre det.

standardrute

før jeg dykker ned i afslappende Routing, vil jeg gerne diskutere standardruten leveret af ASP.NET MVC. Findes i mange startskabeloner, er det et nyttigt værktøj, når du kommer i gang, men jeg anbefaler ikke, at du bruger det til noget produktionsmiljø. Jeg vil liste årsagerne nedenfor:

  • enhver controller i dit projekt vil være tilgængelig, selvom den ikke er registreret med en routingramme som Restful Routing.
  • det kan føre til uventet udadgående rute opløsning og timers debugging.

Trin 1. Installation af Restful Routing

for at komme i gang antager vi, at du starter med en eksisterende ASP.Net MVC projekt og forstå, hvordan man kommer til det punkt.

Åbn Pakkehåndteringskonsollen, og skriv følgende:PM> Install-Package RestfulRouting.

hvis du ikke ønsker at bruge Package Manager-konsollen, kan du højreklikke på dit netprojekt og vælge kontekstmenupunktet “Administrer Nuget-pakker”. Søg efter RestfulRouting installer pakken.

Trin 2. Konfiguration af Restful Routing

et par ændringer skulle være sket med dit projekt, nemlig to filer blev tilføjet: Routes.csog ApplicationController.

Routes.cs skal se ud som sektionen til højre. Vi har allerede inkluderet lidt hjælp til dig i denne fil. Ikke alle skriver en blogapplikation, så du er velkommen til at slette den kommenterede kode, når du har kigget over den.

Bemærk afhængigheden af , dette vil sikre, at ruterne registreres, når din ansøgning starter. Du kan vælge at fjerne denne afhængighed, hvis du hellere vil kalde Start – metoden selv.

// setting the root routemap.Root<HomeController>(x => x.Index());

for din konfiguration skal du sørge for at indstille Root;

ud over Routes.cs får du også ApplicationController. Brug af denne basiscontroller er valgfri, men den har den kode, der er nødvendig for at bruge Formatresultater

Trin 3. Vis Motorkonfiguration (Valgfrit)

ASP.Net MVC afhænger af visningsmotorer for at finde dine visninger. Mens standardvisningsmotoren er ok, fandt vi, at mappestrukturen var lidt detaljeret. Hvis du gerne vil bruge vores visningsmotorer, skal du ændre din globale.at se ud som følgende.

Der Har Du Det. Kode! Kode! Kode!

hvis du vil lære mere om, hvordan og hvad der sker i registreringen af dine ruter, skal du fortsætte med at læse.

RouteSet

i dette afsnit lærer du om RouteSet. Klassen er afgørende for at gøre afslappende Routing arbejde.

grundlæggende

et Rutesæt er en samling af rutekort. Det definerer ikke kun ruter i din applikation, men det kan oprette forbindelse til andre Rutesæt, hvilket skaber et rigt sæt ruter med minimal indsats.

alle ruter er defineret inde i Map – metoden for et Rutesæt.

IMapper-instansen overført til kort præsenterer en måde at kortlægge dine ruter til RouteTable ordbogen i hjertet af hver ASP.Net MVC ansøgning. Hvis du installerede Restful Routing gennem Nuget, har du bemærket et Rutesæt, der allerede er oprettet til dig.

tilslutning

nogle gange vil du logisk adskille dine Rutesæt. I stedet for at gruppere alle ruter i et enkelt Rutesæt, giver vi mulighed for at forbinde Rutesæt. Du skal vælge et Rutesæt for at være roden til dine Rutesæt, hvorefter du kan forbinde andre Rutesæt, som du gerne vil. RouteSets understøtter også navneområder, der ligner områder.

konfiguration (Valgfrit)

et Rutesæt indeholder indstillinger, der kan ændre opførsel af ruteregistrering. Disse egenskaber kan findes inden for rammerne af et Rutesæt. De fleste udviklere vil ikke røre ved disse funktioner.

indstilling standard resultat
Småcaseurls true registrer URL ‘ er i små bogstaver invariant kultur
små fejl true registrer dine handlinger, når de er registreret normalt i små bogstaver invariant kultur
små bogstaver true registrer dine handlinger, når du er registreret med rute i små bogstaver invariant kultur
MapDelete false Tilmeld dig yderligere handling af Slet . Bruges til at vise en sletningsbekræftelsesside, før du fjerner en ressource.

kortlægning

Restful Routing er en kortlægningsramme, og for at udføre kortlægningen leverer vi et sæt koncepter og grænseflader. Læs om hver grænseflade nedenfor, og hvilken funktionalitet hver giver i detaljer.

Root

map.Root<HomeController>(x => x.Index());

hver applikation har brug for en standardside, og det har aldrig været nemmere at registrere en rodsti. Hvis din ansøgning blev hostet på , ville det blive betragtet som roden.

din ansøgning må kun have en rod.

Resource

map.Resource<ProfileController>();

en ressource er en “ting”, der kan tænkes entydigt ud fra applikationsbrugerens perspektiv. En profil for en godkendt bruger er et godt eksempel på en ressource. Tag et kig på følgende url. Når det kommer til en profil, vil du udlede identifikatoren via en cookie (eller andre implicitte midler) og behøver ikke identifikatoren i rutens sti.

url ‘ en antager, at applikationen ved, hvad en profil er, og hvordan man præsenterer den. Hvordan ville registreringen se ud i et Rutesæt?

handlinger og Http-metoder

når du registrerer en ressource, registreres et sæt handlinger og metoder automatisk. Registrer din controller og gennemføre handlingerne.

handling HTTP-metode
Vis
Opret indlæg
nyt
Rediger
opdatering sæt
ødelæg slet

for vores eksempel med ProfileController, ville du få følgende output:

handling HTTP-metode resultat (controller # handling) Url
Vis profil#Vis / profil
ny profil # Ny / profil / Ny
Opret POST profil#Opret / profil
Rediger profil # Rediger / profil/Rediger
opdatering sætte profil # opdatering / profil
DESTROY slet profil#destroy / profil

navngivning

nogle gange navngiver du din controller en ting, men ønsker at få ressource-url ‘ en til at afspejle noget helt andet. Dette er nemt at gøre.

den nye url vil for profile#show vil blive ændret til

Additionally, you can change the default action names of a resource by using the PathNames metode. Dette anbefales ikke, men vi vil gerne give dig muligheder.

valg af handlinger

nogle gange har du muligvis ikke brug for alle de metoder, vi leverer til en ressource. Forestil dig følgende eksempler:

  • som bruger skulle jeg ikke være i stand til at oprette en profil, fordi den oprettes implicit, da vi registrerede os.
  • som bruger skal jeg kunne redigere Min nuværende profil.
  • som bruger bør jeg ikke kunne slette min profil.
  • som bruger skal jeg kunne se min profil

efter gennemgang behøver vi kun at registrere følgende handlinger: Show, Edit, Update. For at begrænse vores ressource til disse handlinger bruger vi følgende kode i Vores Rutesæt.

indlejring af en ressource

// NESTING A RESOURCEmap.Resource<ProfileController>(profile => { profile.Resource<CreditCardController>()});

en ressource afhænger undertiden af en anden ressource. Når du indlejrer en ressource, har du en en til en-relation mellem den overordnede ressource og dens afhængige ressource.

hvis du opretter en creditcard ressource og indlejrer den inden for vores profile ressource (som bemærket til højre), får du de resulterende ruter, eksklusive profilruterne:

Action HTTP Method Result (controller#action) Url Template
SHOW GET creditcard#show /profile/creditcard
NEW GET creditcard#new /profile/creditcard/new
CREATE POST creditcard#create /profile/creditcard
EDIT GET creditcard#edit /profile/creditcard/edit
opdatering sæt kreditkort # opdatering / profil / kreditkort
ødelæg slet kreditkort#ødelæg / profil / kreditkort

ressourcer

map.Resources<ProductsController>();

ressourcer repræsenterer samlinger inden for dit domæne. Forestil dig at opbygge et butiksprogram, du vil måske udsætte dit katalog, så kunderne kan søge og købe produkter. Produkter betragtes som ressourcer. Den url, der genereres, afspejler også, at der er mange produkter, der skal tilbydes.

Læg mærke til pluraliseringen af produkter. Hvis du starter et e-handelssted, vil du sandsynligvis sælge mere end et produkt ad gangen.

handlinger

ved registrering af ressourcer registreres et sæt handlinger og metoder automatisk. Registrer din controller og gennemføre handlingerne.

handling HTTP-metode
indeks
Vis
Opret indlæg
nyt
Rediger
opdatering sæt
ødelæg slet

for vores eksempel med ProductsController, ville du få følgende output:

navngivning

nogle gange navngiver du din controller en ting, men ønsker at få ressourcens url til at afspejle noget helt andet. Dette er nemt at gøre.

den nye url vil for produkter#indeks vil blive ændret.

derudover kan du ændre standardhandlingsnavne for en ressource ved hjælp af metoden PathNames. Dette anbefales ikke, men vi vil gerne give dig muligheder.

tilpasning af {id} – parameteren

som standard bruges navnet id til ressource-id-parameteren i rute-URL-mønstre. For eksempel er URL-mønsteret for produkterne#vis handling i handlinger og HTTP-metoder ovenfor /products/{id}.

i nogle scenarier kan du bruge et andet navn til parameteren. Måske vil du have parameternavnet til at matche navnet på den egenskab, der bruges til at identificere ressourcen:

ruten tilføjet til brugerne#vis handling ville så have URL-mønsteret /users/{username}.

valg af handlinger

nogle gange har du muligvis ikke brug for alle de metoder, vi leverer. Du kan fjerne handlinger ved hjælp af følgende metoder til højre.

Nesting Resources

map.Resources<ProductsController>(products => { products.Resources<ReviewsController>()});

ressourcer afhænger undertiden af andre ressourcer. Når du indlejrer ressourcer, har du et forhold til mange mellem den overordnede ressource og dens afhængige ressourcer. Tænk på et produkt, der har reviews.To opnå dette, du vil registrere de to ressourcer som sådan.

medlems-og Indsamlingsruter

brug metoderne Member og Collection inde i ressourcer til at tilføje ruter til samlingen (uden en ID-ruteparameter) eller medlemmet (med en ID-ruteparameter). Metoder til rådighed til at kortlægge er Get, Post, Put, Delete og Head. Når du er inden for rammerne af en ressource (ental), har du kun adgang til Member – metoden.

standard kortlægning

<!-- IN RAZOR VIEW --><a class="btn" href="@Url.Action("usingpath", "extras")">Path</a><a class="btn" href="@Url.Action("usingroute", "extras")">Route</a>

nogle gange fungerer vores konventioner bare ikke for dig. Vi kan være påståelige, men vi regerer ikke med en jernnæve.

to yderligere metoder leveres, så du kan tilføje brugerdefinerede ruter: sti er en blanding af traditionelle ASP.Net MVC routing syntaks med vores interface indpakning. Rute er en meget traditionel måde at tilføje en brugerdefineret rute på.

områder

områder håndteres af navneområde i afslappende Routing. Normalt er der en sammenhæng mellem mapper og navnerum, så for de fleste udviklere er dette ikke en stor forskel fra, hvad de allerede gør.

den controller, der leveres til Områdemetoden, bruges til at bestemme navneområdet for de grupperede controllere. Strengen “tilknytninger” bruges til at bestemme navnet på området sammen med url-delen.

Husk, at du bliver nødt til at angive området, når du genererer URL ‘ er. Hvis du vil forlade et område, kan du indstille området til en tom streng. Alle regler med en ressource og ressourcer gælder stadig, når man beskæftiger sig med områder.

Vis motorer

Restful Routing leveres med to Vis motorer: RestfulRoutingRazorViewEngineog RestfulRoutingWebFormViewEngine. Lad os se på den ene af disse visningsmotorer.

disse visningsmotorer ændrer den måde, som ASP.Net MVC vil lede efter visninger.

Formatresultat

dette er en funktion, der giver dig mulighed for at bruge implicitte formatudvidelser på en ressource og ressourcer. Der er to kernemetoder til denne funktion: Reagerto, Medformatroutes.

<system.webServer> <modules runAllManagedModulesForAllRequests="true" /></system.webServer>
namespace RestfulRouting.Documentation.Controllers{ public abstract class ApplicationController : Controller { protected ActionResult RespondTo(Action<FormatCollection> format) { return new FormatResult(format); } }}
// IN ROUTESET// enable format routesextras.WithFormatRoutes();

vi leverer et sæt kendte typer ud af boksen for at gøre brug af vores fluent interface lidt pænere, men vi støtter enhver filtypenavn, du kan tænke på. For at generere disse formatruter skal du blot angive formatet som følger.

fantastisk rigtigt?! Vi anbefaler, at du læser følgende afsnit af særheder / Gotchas, hvis du planlægger at bruge formatruter.hans er nyttigt, hvis du bygger enkelt side applikationer bruger sparsomt og forstå, hvornår det er hensigtsmæssigt at adskille funktionalitet i dine handlinger.

Redirect Dead Links

der er tidspunkter, hvor vi træffer bedre url-beslutninger end andre. Vi ønsker muligheden for at ændre URL ‘erne uden at bryde eksisterende URL’ er. Dette er kun nødvendigt, når din ansøgning går live. Dette gælder mest for offentlige sider, men kan være nyttigt i en intranet situtation.

den første ting at bemærke er, at du skal registrere alle dine omdirigeringsruter som de sidste ruter på din liste. Dette skyldes, at de er mindst vigtige. Det vil kun nogensinde blive ramt, når du får adgang til et gammelt link. Din ansøgning bør ikke generere disse URL ‘ er, og hvis det er så har du problemer.

for det andet ser registreringen ud som RestfulRouting ‘ s gode gamle syntaks, men det kræver ikke, at du nester det inden for nogen definition. Jeg vil anbefale, oprette et Rutesæt kaldet DeadLinks eller omdirigeringer og forbinde det i slutningen af dit master RouteSet.

endelig, og dette er vigtigt, registrere RedirectRouteFilterAttribte som et globalt filter.

som du kan se til højre, indstiller du bare den gamle url og giver værdier, der skal løses til den nye url. Vi bruger UrlHelper under dækslerne for at finde den bedste matchende rute.

Route Debugger

// IN ROUTESETmap.DebugRoute("routedebug");

Restful Routing kommer med en kraftfuld rute debugger formål at hjælpe dig med at forstå din rute tilknytninger. Du kan aktivere og deaktivere route debugger udelukkende ved at tilføje følgende linje til dit Rutesæt.

særheder / Gotchas

dette afsnit forsøger at detaljere nogle særheder med ASP.NET MVC og Restful Routing. Disse kan forårsage problemer nogle gange, og det er godt at forstå, hvorfor og hvornår de kan påvirke din ansøgning.

vedvarende Ruteværdier

ASP.Net MVC forsøger altid at være hjælpsom. Nyttige, selvom velmenende, kan føre til nogle mærkelige adfærd til tider. Det største problem kan gemmes ruteværdier fra din eksisterende anmodning.

at forstå dette særhed kan hjælpe dig med at fejle mange problemer, ikke kun med afslappende Routing, men med ASP.NET MVC generelt. Du kan se eksemplet til højre.

blanding kortlægning niveauer

map.Resource<ProfileController>(profile => { // DOH! should be profile // not map! // EXCEPTION!!!! map.Resource<CreditCardController>()});

Restful Routing er designet til at være flydende og indlejret. Under oprettelsen af din RouteSet kan du ved et uheld kalde den forkerte parameter, hvilket fører til en fejl, der kan være vanskelig at diagnosticere. Vores undtagelse er nyttig, men det er en almindelig nok fejl, at vi besluttede at dokumentere det.

navneområder og navnekonflikter

nogle gange vil vi navngive controllere det samme, men have dem i forskellige navneområder. Dette er hensigtsmæssigt, når du bygger en administrativ og frontvendt del af dit site. Husk bare at indstille navneområderne korrekt, så Routing kan instantiere den korrekte controller.