leppoisa reititys ASP.NET MVC, perustuu Ruby On Rails reititys DSL. Se utlizes HTTP verbejä pitää ainutlaatuisia polkuja minimiin, optimoimalla ohjaimet rakenne.
PM > Install-Package restful Routing
Tervetuloa levolliseen reititykseen ASP.NET MVC! Reititys on kiistatta kaiken ytimessä ASP.Net MVC-Sovellukset. Reittien hoitaminen itse voi olla hankalaa, turhauttavaa ja tuottamatonta. Jotkut kehittäjät käyttävät catch-all-reittiä, mikä voi johtaa odottamattomiin ongelmiin sovelluksen kasvaessa. Levollinen reititys ratkaisee reitityksen hallinnan ongelman tarjoamalla mielipiteitä sisältävän rajapinnan reittien rekisteröinnistä.
toivomme, että huomaat tämän kirjaston olevan niin helppokäyttöinen, että ihmettelet, miten olet koskaan kehittynyt ASP.Net MVC sovelluksia ilman sitä.
kultainen seitsemän
leppoisa reititys perustuu Resources
: n ja kultaisen seitsemän toiminnan ideaan:
toiminta | HTTP-menetelmä |
---|---|
indeksi | GET |
Näytä | GET |
luo | POST |
Uusi | GET |
EDIT | GET |
päivitys | PUT |
tuhoa | poista |
tavoitteena levollinen reititys on tehdä sinulle concious Oman ohjaimet. Vaikka voit joustaa sääntöjä tarvittaessa, sinun pitäisi todella keskittyä pitämään kaikki ohjaimet rajoitettu nämä seitsemän toimintoa. Jos taistelette rauhallisen reitityksen yleissopimuksia vastaan, ette hyödynnä itsepintaisen kehyksemme voimaa ja ole onneton tehdessänne niin.
Oletusreitti
ennen kuin sukellat levolliseen reititykseen, haluaisin keskustella ASP.NET MVC. Monissa starter-malleissa se on hyödyllinen työkalu, kun aloitat, mutta en suosittele käyttämään sitä missään tuotantoympäristössä. Luettelen syyt alla:
- mikä tahansa projektisi ohjain on käytettävissä, vaikka ei olisi rekisteröitynyt Reitityskehykseen kuten levollinen reititys.
- se voi johtaa odottamattomaan lähtöruuturatkaisuun ja tuntien virheenkorjaukseen.
Vaihe 1. Leppoisan reitityksen asentaminen
aloittaaksesi oletamme, että aloitat olemassa olevalla reitityksellä ASP.Net MVC projekti ja ymmärtää, miten päästä siihen pisteeseen.
avaa Paketinhallintakonsoli ja kirjoita seuraava:PM> Install-Package RestfulRouting
.
jos et halua käyttää Paketinhallintakonsolia, voit napsauttaa www-projektiasi hiiren kakkospainikkeella ja valita kontekstivalikon ”Hallitse Nuget-paketteja”. Etsi kohdetta RestfulRouting
asenna paketti.
Vaihe 2. Levollisen reitityksen määrittäminen
projektiin olisi pitänyt tehdä pari muutosta, nimittäin kaksi tiedostoa lisättiin: Routes.cs
ja ApplicationController
.
Routes.cs
pitäisi näyttää oikealta löytyvältä osastolta. Meillä on jo hieman apua mukana sinulle tässä tiedostossa. Kaikki eivät ole kirjoittamassa blogihakemusta, joten voit vapaasti poistaa kommentoidun koodin, kun olet katsonut sitä.
huomaa riippuvuus Webactivatorista, tämä varmistaa, että reitit rekisteröidään, kun hakemuksesi alkaa. Voit poistaa tämän riippuvuuden, jos haluat mieluummin itse käyttää Start
– menetelmää.
// setting the root routemap.Root<HomeController>(x => x.Index());
sinun kokoonpanollesi, muista asettaa Root
;
lisäksi Routes.cs
saa myös ApplicationController
. Tämän perusohjaimen käyttäminen on vapaaehtoista, mutta siinä on koodi, jota tarvitaan Formaattitulosten
vaiheen 3 hyödyntämiseen. Näytä moottorin kokoonpano (valinnainen)
ASP.Net MVC riippuu näkymä moottorit paikantaa näkymät. Vaikka oletusnäkymämoottori on ok, huomasimme, että kansiorakenne on hieman monisanainen. Jos haluat käyttää näkymämoottoreitamme, muuta globaalia.Asax tiedosto näyttää seuraavan.
Siinä Se On. Koodi! Koodi! Koodi!
jos haluat lisätietoja siitä, miten ja mitä reittien rekisteröinnissä tapahtuu, jatka lukemista.
reitit
tässä osiossa kerrotaan RouteSet
. Luokka on kriittinen, jotta levollinen reititys onnistuu.
Basics
a RouteSet on kokoelma reittikarttoja. Se ei ainoastaan määritä reittejä sovelluksessa, mutta se voi muodostaa yhteyden muihin reitteihin, luoden runsaasti reittejä vähällä vaivalla.
kaikki reitit on määritelty Routasetin Map
– menetelmän sisällä.
Map: iin siirretty IMapper-instanssi esittelee tavan kartoittaa reitit RouteTable
sanakirjaan joka ASP.Net MVC-sovellus. Jos olet asentanut Restful Routing kautta Nuget, olet huomannut RouteSet jo luotu sinulle.
yhdistäminen
joskus haluat loogisesti erottaa reittisi. Sen sijaan, että kaikki reitit ryhmitettäisiin yhteen Reitistöön, tarjoamme mahdollisuuden yhdistää reitit. Sinun täytyy valita yksi Routeset on root teidän RouteSets, jonka jälkeen voit liittää muita RouteSets miten haluat. Routeet tukevat myös nimiavaruuksia, kuten alueita.
Configuration (valinnainen)
Reittisarja tarjoaa asetuksia, jotka voivat muuttaa reitin rekisteröinnin käyttäytymistä. Nämä ominaisuudet löytyvät yhteydessä RouteSet. Useimmat kehittäjät eivät halua koskea näitä ominaisuuksia.
asetus | oletusarvo | tulos |
---|---|---|
pienaakkoset | true |
rekisteröi URL-osoitteet pienaakkosin invarianttiviljelmään |
vähämerkityksiset tulokset | true |
rekisteröi toimesi, kun ne rekisteröidään normaalisti pienaakkosin invariant-kulttuuriin |
vähämerkityksiset toimet | true |
rekisteröi toimesi, kun olet rekisteröitynyt Route in lowercase invariant culture |
MapDelete | false |
Rekisteri an poiston lisätoiminto . Käytetään poistamaan vahvistussivu ennen resurssin poistamista. |
kartoitus
levollinen reititys on kartoituskehys, ja kartoituksen tekemiseen tarjoamme joukon käsitteitä ja rajapintoja. Lue kunkin käyttöliittymän alla ja mitä toimintoja kukin tarjoaa yksityiskohtaisesti.
Root
map.Root<HomeController>(x => x.Index());
jokainen sovellus tarvitsee oletussivun, eikä juuripolun rekisteröinti ole koskaan ollut helpompaa. Jos hakemuksesi isännöi niin sitä pidettäisiin juurena.
hakemuksessasi voi olla vain yksi juuri.
resurssi
map.Resource<ProfileController>();
resurssi on ”asia”, jota voidaan ajatella yksioikoisesti sovelluksen käyttäjän näkökulmasta. Todennetun käyttäjän profiili on hyvä esimerkki resurssista. Katso seuraavaa url-osoitetta. Kun kyseessä on profiili, määrität tunnisteen evästeen (tai muun implisiittisen keinon) kautta, etkä tarvitse tunnistetta reitin polussa.
url-osoite olettaa, että sovellus tietää, mikä profiili on ja miten se esitetään. Miltä rekisteröinti näyttäisi nyt Routaputkessa?
toiminnot ja Http-menetelmät
kun resurssi rekisteröidään, joukko toimintoja ja menetelmiä rekisteröidään automaattisesti. Rekisteröi rekisterinpitäjäsi ja toteuta toimenpiteet.
toiminta | HTTP-menetelmä |
---|---|
Näytä | GET |
luo | POST |
Uusi | GET |
EDIT | GET |
päivitys | PUT |
tuhoa | poista |
meidän esimerkistä ProfileController
saat seuraavan tuotoksen:
toiminta | HTTP-menetelmä | tulos (ohjain#toiminta) | Url |
---|---|---|---|
Näytä | Hanki | profiili#Näytä | / profiili |
Uusi | GET | profile#new | / profile / new |
luo | POST | profiili#Luo | / profiili |
EDIT | GET | profile#edit | / profile / edit |
päivitys | PUT | profiili#päivitys | / profiili |
DESTROY | DELETE | profile#destroy | / profile |
nimeäminen
joskus nimeät ohjaimesi yhden asian, mutta haluat resurssin url: n heijastavan jotain aivan muuta. Tämä on helppo tehdä.
profile#show
Uusi url-osoite muutetaan
Additionally, you can change the default action names of a resource by using the PathNames
– menetelmäksi. Tämä ei ole suositeltavaa, mutta haluamme antaa sinulle vaihtoehtoja.
toimien valitseminen
joskus et välttämättä tarvitse kaikkia keinoja, joita tarjoamme resurssiksi. Kuvittele seuraavat esimerkit:
- käyttäjänä minun ei pitäisi pystyä luomaan profiilia,koska se luodaan implisiittisesti rekisteröityessä.
- käyttäjänä minun pitäisi pystyä muokkaamaan nykyistä profiiliani.
- käyttäjänä minun ei pitäisi pystyä poistamaan profiiliani.
- käyttäjänä minun pitäisi pystyä näkemään profiilini
tarkastelun jälkeen meidän tarvitsee vain rekisteröidä seuraavat toiminnot: Show
, Edit
, Update
. Rajoittaaksemme resurssimme näihin toimiin, käyttäisimme seuraavaa koodia Routesetissämme.
Pesimälähde
// NESTING A RESOURCEmap.Resource<ProfileController>(profile => { profile.Resource<CreditCardController>()});
resurssi on joskus riippuvainen toisesta resurssista. Kun peität resurssia, sinulla on yksi yhteen suhde vanhemman resurssin ja sen riippuvaisen resurssin välillä.
jos luot creditcard
resurssin, ja peität sen meidän profile
resurssiimme (kuten huomioitu oikealla), saat tuloksena olevat reitit pois lukien profiilireitit:
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 |
UPDATE | PUT | creditcard#update | / profile / creditcard |
DESTROY | DELETE | creditcard#destroy | / profile / creditcard |
resurssit
map.Resources<ProductsController>();
resurssit edustavat kokoelmia, joissa on Oma toimialue. Kuvittele rakentaa tallentaa sovelluksen, saatat haluta paljastaa luettelo niin, että asiakkaat voivat etsiä ja ostaa tuotteita. Tuotteita pidettäisiin resursseina. Verkko-osoite, joka syntyy, kuvastaisi myös sitä, että tarjolla on monia tuotteita.
huomaa tuotteiden moniarvoisuus. Jos olet aloittamassa verkkokaupan sivusto, sinun todennäköisesti myydä enemmän kuin yksi tuote kerrallaan.
toimet
kun resursseja rekisteröidään, joukko toimia ja menetelmiä rekisteröidään automaattisesti. Rekisteröi rekisterinpitäjäsi ja toteuta toimenpiteet.
toiminta | HTTP-menetelmä |
---|---|
indeksi | GET |
Näytä | GET |
luo | POST |
Uusi | GET |
EDIT | GET |
päivitys | PUT |
tuhoa | poista |
meidän esimerkistä ProductsController
saat seuraavan tuotoksen:
nimeäminen
joskus nimeät ohjaimesi yhden asian, mutta haluat resurssien url: n kuvastavan jotain aivan muuta. Tämä on helppo tehdä.
tuotteiden Uusi url-osoite#indeksi muuttuu.
lisäksi voit muuttaa resurssin oletustoimintojen nimiä käyttämällä PathNames
– menetelmää. Tämä ei ole suositeltavaa, mutta haluamme antaa sinulle vaihtoehtoja.
muokattaessa {id} – parametria
oletuksena käytetään nimeä id
resurssin id-parametrille reitin URL-kuvioissa. Esimerkiksi yllä olevien tuotteiden#Näytä toiminta toiminnoissa ja HTTP-menetelmät URL-kuviointi on /products/{id}
.
joissakin skenaarioissa parametrille kannattaa käyttää eri nimeä. Ehkä haluat parametrin nimen vastaavan resurssin tunnistamiseen käytetyn ominaisuuden nimeä:
käyttäjille lisätty reitti#Näytä toiminto olisi tällöin URL-malli /users/{username}
.
toimien valitseminen
joskus et välttämättä tarvitse kaikkia tarjoamiamme menetelmiä. Voit poistaa toimintoja käyttämällä follwing menetelmiä oikealla.
Pesimäresurssit
map.Resources<ProductsController>(products => { products.Resources<ReviewsController>()});
resurssit riippuvat joskus muista resursseista. Kun pesii resursseja, sinulla on yhdestä moneen suhde emoresurssin ja sen riippuvaisten resurssien välillä. Ajattele tuotetta, joka on reviews.To saavuttaa tämän voit rekisteröidä kaksi resurssia näin.
jäsen-ja Keräysreitit
käyttävät resurssien sisällä Member
ja Collection
menetelmiä, joilla lisätään keräykseen reittejä (ilman id-reittiparametria) tai jäsen (ID-reittiparametrilla). Karttatapoja ovat Get, Post, Put, Delete ja Head. Kun kyseessä on yksittäinen resurssi, voit käyttää ainoastaan Member
– menetelmää.
Standardikartoitus
<!-- IN RAZOR VIEW --><a class="btn" href="@Url.Action("usingpath", "extras")">Path</a><a class="btn" href="@Url.Action("usingroute", "extras")">Route</a>
joskus konventiomme eivät vain toimi sinulle. Saatamme olla itsepäisiä, mutta emme hallitse rautaisella otteella.
kaksi muuta menetelmää on saatavilla, joten voit lisätä mukautettuja reittejä: polku on sekoitus perinteistä ASP.Net MVC reititys syntaksi meidän käyttöliittymä kääre. Reitti on hyvin perinteinen tapa lisätä oma reitti.
alueet
alueet hoidetaan Nimiavaruudella levollisessa reitityksessä. Yleensä kansioiden ja nimiavaruuksien välillä on korrelaatio, joten useimmille kehittäjille tämä ei ole suuri ero siihen, mitä he jo tekevät.
Aluemenetelmälle annettua ohjainta käytetään ryhmitettyjen ohjaimien nimiavaruuden määrittämiseen. ”Mappings” – merkkijonoa käytetään alueen nimen määrittämiseen yhdessä url-osan kanssa.
muista, että alue on ilmoitettava, kun luot URL-osoitteita. Jos haluat poistua alueelta, voit asettaa alueen tyhjäksi merkkijonoksi. Kaikki säännöt resursseineen ja resursseineen pätevät edelleen, kun käsitellään alueita.
View Engines
levollinen reititys tulee kahdella view-moottorilla: RestfulRoutingRazorViewEngine
ja RestfulRoutingWebFormViewEngine
. Katsotaanpa yhtä näistä näköalamoottoreista.
nämä katselumoottorit muuttavat tapaa, jolla ASP.Net MVC etsii näkymiä.
Format Result
tämä on ominaisuus, jonka avulla voit käyttää implisiittisiä formaattilaajennuksia resurssiin ja resursseihin. Tähän ominaisuuteen on kaksi ydinmenetelmää: respondo, 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();
tarjoamme joukon tunnettuja tyyppejä kättelyssä, jotta käyttämällä sujuvaa käyttöliittymää hieman mukavampi, mutta tuemme mitä tahansa tiedostotunnistetta, jota voit ajatella. Voit luoda nämä muoto reittejä vain määrittää muodossa seuraavasti.
Awesome right?! Suosittelemme, että luet seuraavat osiot Quirks / Gotchas, jos aiot käyttää muotoreittejä.hänen on hyödyllistä, jos rakennat yhden sivun sovelluksia käyttää säästeliäästi ja ymmärtää, milloin on tarkoituksenmukaista erottaa toiminnallisuutta toiminnassasi.
Redirect Dead Links
on aikoja, jolloin teemme parempia url-ratkaisuja kuin muut. Haluamme mahdollisuuden muuttaa URL-osoitteita rikkomatta olemassa olevia URL-osoitteita. Tämä on tarpeen vain, kun hakemus menee elää. Tämä koskee enimmäkseen julkisia sivustoja, mutta voisi olla hyötyä intranet situtation.
ensimmäiseksi kannattaa ilmoittaa kaikki uudelleenohjatut reitit listasi viimeisiksi reiteiksi. Tämä johtuu siitä, että ne ovat vähiten tärkeitä. Osuma tulee vain, kun käytät vanhaa linkkiä. Sovelluksen ei pitäisi tuottaa näitä URL-osoitteita, ja jos se on sitten sinulla on ongelmia.
toiseksi, rekisteröinti näyttää Restfulroutingin vanhalta hyvältä syntaksilta, mutta sitä ei tarvitse peitellä minkään määritelmän sisällä. Haluaisin suositella, luoda RouteSet nimeltään DeadLinks tai ohjaa ja yhdistää sen lopussa master RouteSet.
lopuksi, ja tämä on tärkeää, rekisteröi Uudelleenohjautuva Suodatinattribte maailmanlaajuiseksi suodattimeksi.
kuten näet oikealle, asetat vain vanhan url: n ja annat arvot ratkaistavaksi uudelle url: lle. Käytämme peiton alla olevaa URL-osoitetta löytääksemme parhaan sopivan reitin.
Route Debugger
// IN ROUTESETmap.DebugRoute("routedebug");
levollinen reititys sisältää tehokkaan reitin debuggerin, jonka tarkoituksena on auttaa sinua ymmärtämään reittien kartoituksia. Voit ottaa reitin debuggerin käyttöön ja poistaa sen käytöstä puhtaasti lisäämällä seuraavan rivin Reittiohjelmaasi.
Quirks / Gotchas
tässä jaksossa yritetään eritellä joitakin omituisuuksia ASP.NET MVC ja rauhallinen reititys. Nämä voivat aiheuttaa ongelmia joskus ja on hyvä ymmärtää, miksi ja milloin ne voivat vaikuttaa hakemukseen.
Kestoreittiarvot
ASP.Net MVC yrittää aina olla avuksi. Avulias, vaikkakin hyvää tarkoittava, voi johtaa joskus outoon käytökseen. Suurin ongelma voidaan tallentaa reittiarvot olemassa olevasta pyynnöstä.
tämän omituisuuden ymmärtäminen voi auttaa sinua debugaamaan paljon ongelmia, ei vain levollisella reitityksellä, vaan ASP.NET MVC yleensä. Näet esimerkin oikealla.
Sekoituskartoitustasot
map.Resource<ProfileController>(profile => { // DOH! should be profile // not map! // EXCEPTION!!!! map.Resource<CreditCardController>()});
levollinen reititys on suunniteltu sujuvaksi ja sisäkkäiseksi. RouteSet
: n luomisen aikana saatat vahingossa soittaa väärää parametria, mikä johtaa virheeseen, jota voi olla vaikea diagnosoida. Poikkeuksemme on hyödyllinen, mutta tämä on sen verran yleinen virhe, että päätimme dokumentoida sen.
nimiavaruudet ja Nimikiistat
joskus haluamme nimetä ohjaajat samoiksi, mutta saada ne eri nimiavaruuksiin. Tämä on tarkoituksenmukaista, kun rakennat hallinnollisen ja edessä osa sivuston. Muista vain asettaa nimiavaruudet asianmukaisesti, jotta reititys voi asentaa oikean ohjaimen.
Vastaa