Restful Routing för ASP.NET MVC, baserat på Ruby on Rails routing DSL. Det utlizes HTTP verb för att hålla unika vägar till ett minimum, samtidigt optimera din controllers struktur.

PM > installera-paket RestfulRouting

Välkommen till Restful Routing för ASP.NET MVC! Routing är utan tvekan kärnan i alla ASP.Net MVC applikationer. Att hantera rutter själv kan vara besvärligt, frustrerande och oproduktivt. Vissa utvecklare använder en catch-all-rutt, vilket kan leda till oväntade problem när applikationen växer. Restful Routing löser routinghanteringsfrågan genom att tillhandahålla ett uppfattat gränssnitt för registrering av rutter.

vi hoppas att du tycker att detta bibliotek är så lätt att använda att du kommer att undra hur du någonsin utvecklat ASP.Net MVC-applikationer utan det.

gyllene sju

Restful Routing bygger på tanken på Resources och de gyllene sju åtgärderna:

åtgärd HTTP-metod
INDEX
visa skaffa sig
skapa inlägg
nytt
redigera hämta
uppdatera sätt
förstör radera

syftet med vilsam Routing är att göra dig medveten om dina kontroller. Medan du kan böja reglerna när det är lämpligt, bör du verkligen fokusera på att hålla alla kontroller begränsade till dessa sju åtgärder. Om du kämpar mot konventionerna om vilsam Routing, kommer du inte att utnyttja styrkan i vår uppfattade ram och vara eländig att göra det.

standardrutt

innan jag dyker in i vilsam Routing vill jag diskutera standardrutten som tillhandahålls av ASP.NET MVC. Finns i många startmallar, det är ett användbart verktyg när du kommer igång, men jag rekommenderar inte att du använder den för någon produktionsmiljö. Jag kommer att lista orsakerna nedan:

  • alla kontroller i ditt projekt kommer att vara tillgängliga även om de inte är registrerade med ett routingramverk som Restful Routing.
  • det kan leda till oväntad Utåtriktad ruttupplösning och timmar av felsökning.

Steg 1. Installera Restful Routing

för att komma igång antar vi att du börjar med en befintlig ASP.Net MVC projekt och förstå hur man kommer till den punkten.

öppna Pakethanterarkonsolen och skriv följande:PM> Install-Package RestfulRouting.

om du inte vill använda Pakethanterarkonsolen kan du högerklicka på ditt webbprojekt och välja snabbmenyalternativet ”hantera Nuget-paket”. Sök efter RestfulRouting installera paketet.

steg 2. Konfigurera Restful Routing

ett par ändringar borde ha hänt med ditt projekt, nämligen två filer lades till: Routes.csoch ApplicationController.

Routes.cs ska se ut som avsnittet till höger. Vi har lite hjälp som redan ingår för dig i den här filen. Inte alla skriver en bloggapplikation, så radera gärna den kommenterade koden efter att du har tittat över den.

notera beroendet av WebActivator, detta säkerställer att rutterna registreras när din ansökan startar. Du kan välja att ta bort detta beroende om du hellre vill ringa Start – metoden själv.

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

för din konfiguration, var noga med att ställa in Root;

förutom Routes.cs får du också ApplicationController. Att använda denna baskontroller är valfri, men den har den kod som krävs för att använda Formatresultat

steg 3. Visa motorkonfiguration (tillval)

ASP.Net MVC beror på visningsmotorer för att hitta dina åsikter. Medan standardvyn motorn är ok, fann vi att mappstrukturen att vara lite utförlig. Om du vill använda våra synmotorer, ändra sedan din globala.ASAX-fil för att se ut som följande.

Där Har Du Det. Kod! Kod! Kod!

om du vill lära dig mer om hur och vad som händer i registreringen av dina rutter Fortsätt läsa.

RouteSet

i det här avsnittet lär du dig om RouteSet. Klassen är avgörande för att göra vilsam Routing arbete.

grunderna

en RouteSet är en samling av ruttmappningar. Det definierar inte bara rutter i din ansökan, men det kan ansluta till andra RouteSets, skapa en rik uppsättning rutter med minimal ansträngning.

alla rutter definieras i Map – metoden för en Ruttuppsättning.

imapper-instansen som skickas till kartan presenterar ett sätt att kartlägga dina rutter till RouteTable – ordboken i hjärtat av varje ASP.Net MVC ansökan. Om du har installerat Restful Routing genom Nuget, du kommer att ha märkt en RouteSet redan skapats för dig.

anslutning

ibland vill du logiskt separera dina Ruttuppsättningar. Istället för att gruppera alla rutter i en enda Ruttuppsättning ger vi möjlighet att ansluta Ruttuppsättningar. Du måste välja en RoutSet för att vara roten till dina RouteSets, varefter du kan ansluta andra RouteSets som du vill. RouteSets stöder också namnrymder, liknande områden.

konfiguration (tillval)

en RouteSet ger inställningar som kan ändra beteendet för ruttregistrering. Dessa egenskaper kan hittas inom ramen för en RouteSet. De flesta utvecklare vill inte röra dessa funktioner.

inställning standard resultat
LowercaseUrls true registrera webbadresser i gemener invariant kultur
LowercaseDefaults true registrera dina åtgärder när de registreras normalt i små bokstäver invariant kultur
små bokstäver true registrera dina åtgärder när du är registrerad med rutt i små bokstäver invariant kultur
MapDelete false registrera en ytterligare åtgärd av Radera . Används för att visa en borttagningsbekräftelsesida innan du tar bort en resurs.

kartläggning

Restful Routing är ett kartläggningsramverk, och för att göra kartläggningen tillhandahåller vi en uppsättning koncept och gränssnitt. Läs om varje gränssnitt nedan och vilken funktionalitet varje ger i detalj.

Root

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

varje applikation behöver en standardsida, och det har aldrig varit enklare att registrera en rotväg. Om din ansökan var värd på skulle det betraktas som roten.

din ansökan kan bara ha en rot.

resurs

map.Resource<ProfileController>();

en resurs är en ”sak” som kan ses på singularly ur programmet användaren. En profil för en autentiserad användare är ett bra exempel på en resurs. Ta en titt på följande url. När det gäller en profil kommer du att härleda identifieraren via en cookie (eller andra implicita medel) och behöver inte identifieraren i rutten.

webbadressen förutsätter att applikationen vet vad en profil är och hur man presenterar den. Hur skulle registreringen se ut i en Ruttuppsättning?

åtgärder och Http-metoder

när du registrerar en resurs registreras en uppsättning åtgärder och metoder automatiskt. Registrera din controller och genomföra åtgärderna.

åtgärd HTTP-metod
visa skaffa sig
skapa inlägg
nytt
redigera hämta
uppdatera sätt
förstör radera

för vårt exempel med ProfileController skulle du få följande utdata:

åtgärd HTTP-metod resultat (styrenhet # åtgärd) Url
visa skaffa sig profil # Visa / profil
ny skaffa profil # ny / profil / ny
skapa posta profil # Skapa / profil
redigera hämta profil # redigera / profil / redigera
uppdatera sätt profil # uppdatering / profil
förstör radera profil # förstör / profil

Namngivning

ibland namnger du din kontroller en sak, men vill att resursadressen återspeglar något helt annat. Detta är enkelt att göra.

den nya webbadressen kommer för profile#show kommer att ändras till

Additionally, you can change the default action names of a resource by using the PathNames metod. Detta rekommenderas inte, men vi vill ge dig alternativ.

välja åtgärder

ibland kanske du inte behöver alla metoder vi tillhandahåller för en resurs. Föreställ dig följande exempel:

  • som användare borde jag inte kunna skapa en profil, eftersom den skapas implicit när vi registrerade oss.
  • som användare borde jag kunna redigera min nuvarande profil.
  • som användare borde jag inte kunna ta bort min profil.
  • som användare borde jag kunna se min profil

efter granskning behöver vi bara registrera följande åtgärder: Show, Edit, Update. För att begränsa vår resurs till dessa åtgärder skulle vi använda följande kod i vår RouteSet.

häckar en resurs

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

en resurs beror ibland på en annan resurs. När du häckar en resurs har du en en-till-en-relation mellan den överordnade resursen till dess beroende resurs.

om du skapar en creditcard – resurs och bo i vår profile – resurs (som noterat till höger) får du de resulterande rutterna, exklusive profilrutterna:

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
uppdatera sätt kreditkort # uppdatera / profil / kreditkort
förstör radera kreditkort # förstör / profil/kreditkort

resurser

map.Resources<ProductsController>();

resurser representerar Samlingar med din domän. Tänk dig att bygga en butiksapplikation, du kanske vill exponera din katalog så att kunder kan söka och köpa produkter. Produkter skulle betraktas som resurser. Webbadressen som genereras skulle också återspegla att det finns många produkter som erbjuds.

Lägg märke till pluraliseringen av produkter. Om du startar en e-handelsplats, skulle du sannolikt sälja mer än en produkt i taget.

åtgärder

när du registrerar resurser registreras en uppsättning åtgärder och metoder automatiskt. Registrera din controller och genomföra åtgärderna.

åtgärd HTTP-metod
INDEX
visa skaffa sig
skapa inlägg
nytt
redigera hämta
uppdatera sätt
förstör radera

för vårt exempel med ProductsController skulle du få följande utdata:

Namngivning

ibland namnger du din kontroller en sak, men vill att resursadressen ska återspegla något helt annat. Detta är enkelt att göra.

den nya webbadressen kommer för produkter#index kommer att ändras.

dessutom kan du ändra standardåtgärdsnamnen för en resurs med hjälp av metoden PathNames. Detta rekommenderas inte, men vi vill ge dig alternativ.

anpassa parametern {id}

som standard används namnet id för parametern resource id i route URL-mönster. Till exempel är URL-mönstret för åtgärden produkter#visa i åtgärder och HTTP-metoder ovan /products/{id}.

i vissa scenarier kanske du vill använda ett annat namn för parametern. Kanske vill du att parameternamnet ska matcha namnet på egenskapen som används för att identifiera resursen:

rutten som läggs till för användarna#show-åtgärden skulle då ha URL-mönstret /users/{username}.

välja åtgärder

ibland kanske du inte behöver alla metoder vi tillhandahåller. Du kan ta bort åtgärder med hjälp av följande metoder till höger.

Nesting Resources

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

resurser beror ibland på andra resurser. När du häckar resurser har du en till många relation mellan den överordnade resursen till dess beroende resurser. Tänk på en produkt som har reviews.To uppnå detta skulle du registrera de två resurserna så.

medlems-och Samlingsrutter

använd metoderna Member och Collection för att lägga till rutter i samlingen (utan en ID-ruttparameter) eller medlemmen (med en ID-ruttparameter). Metoder som är tillgängliga för kartan är Get, Post, Put, Delete och Head. När du är inom ramen för en resurs (singular) har du bara tillgång till metoden Member.

Standardmappning

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

ibland fungerar våra konventioner bara inte för dig. Vi kan vara påstridiga, men vi regerar inte med en järnhand.

ytterligare två metoder tillhandahålls så att du kan lägga till anpassade rutter: Path är en blandning av traditionella ASP.Net MVC routing syntax med vårt gränssnitt omslag. Rutt är ett mycket traditionellt sätt att lägga till en anpassad rutt.

områden

områden hanteras av namnrymden i Restful Routing. Vanligtvis finns det en korrelation mellan mappar och namnområden, så för de flesta utvecklare är det inte en stor skillnad från vad de redan gör.

den styrenhet som tillhandahålls för Områdesmetoden används för att bestämma namnrymden för de grupperade styrenheterna. Strängen” mappings ” används för att bestämma namnet på området, tillsammans med url-delen.

kom ihåg att du måste ange området när du skapar webbadresser. För att avsluta ett område kan du ställa in området till en tom sträng. Alla regler med en resurs och resurser gäller fortfarande när man arbetar med områden.

Visa motorer

Restful Routing levereras med två visa motorer: RestfulRoutingRazorViewEngine och RestfulRoutingWebFormViewEngine. Låt oss titta på en av dessa vymotorer.

dessa visningsmotorer förändrar sättet som ASP.Net MVC kommer att leta efter visningar.

Formatresultat

detta är en funktion som låter dig använda implicita formattillägg på en resurs och resurser. Det finns två kärnmetoder för denna funktion: RespondTo, WithFormatRoutes.

<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 tillhandahåller en uppsättning kända typer ur lådan för att göra använda vår fluent gränssnitt lite trevligare, men vi stöder alla filändelse du kan tänka dig. För att generera dessa formatrutter anger du bara formatet enligt följande.

fantastisk rätt?! Vi rekommenderar att du läser följande avsnitt av Quirks / Gotchas om du planerar att använda formatrutter.hans är till hjälp om du bygger enstaka applikationer använder sparsamt och förstår när det är lämpligt att separera funktionalitet i dina handlingar.

omdirigera döda länkar

det finns tillfällen då vi fattar bättre url-beslut än andra. Vi vill ha möjligheten att ändra webbadresserna utan att bryta befintliga webbadresser. Detta är bara nödvändigt när din ansökan går live. Detta gäller främst offentliga webbplatser, men kan vara användbart i en intranätsituation.

det första att notera är att du bör registrera alla dina omdirigeringsvägar som de sista rutterna i din lista. Detta beror på att de är minst viktiga. Det kommer bara att träffas när du öppnar en gammal länk. Din ansökan ska inte generera dessa webbadresser, och om det är så har du problem.

för det andra ser registreringen ut som Restfulroutings gamla gamla syntax, men det kräver inte att du bo i någon definition. Jag skulle rekommendera, skapa en RouteSet som heter DeadLinks eller omdirigeringar och ansluta den i slutet av din master RouteSet.

slutligen, och detta är viktigt, registrera RedirectRouteFilterAttribte som ett globalt filter.

som du kan se till höger ställer du bara in den gamla webbadressen och anger värden för att lösa till den nya webbadressen. Vi använder UrlHelper under täcket för att hitta den bästa matchande rutten.

Route Debugger

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

Restful Routing levereras med en kraftfull route debugger som syftar till att hjälpa dig att förstå dina ruttmappningar. Du kan aktivera och inaktivera route debugger rent genom att lägga till följande rad i din RouteSet.

Quirks / Gotchas

detta avsnitt försöker detalj några quirks med ASP.NET MVC och Restful Routing. Dessa kan orsaka problem ibland och det är bra att förstå varför och när de kan påverka din ansökan.

persistenta Ruttvärden

ASP.Net MVC försöker alltid vara till hjälp. Hjälpsam, även om välmenande, kan leda till något konstigt beteende ibland. Det största problemet kan sparas ruttvärden från din befintliga begäran.

att förstå denna quirk kan hjälpa dig att felsöka många problem, inte bara med vilsam Routing, men med ASP.NET MVC i allmänhet. Du kan se exemplet till höger.

blandning kartläggning nivåer

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

Restful Routing är utformad för att vara flytande och kapslade. Under skapandet av din RouteSet kan du av misstag ringa fel parameter, vilket leder till ett fel som kan vara svårt att diagnostisera. Vårt undantag är till hjälp, men det här är ett vanligt nog misstag att vi bestämde oss för att dokumentera det.

namnrymder och namnkonflikter

ibland vill vi namnge kontroller samma, men ha dem i olika namnrymder. Detta är lämpligt när du bygger en administrativ och framåtvänd del av din webbplats. Kom bara ihåg att ställa in namnrymderna på lämpligt sätt så att Routing kan initiera rätt kontroller.