Programiranje

Kako uporabiti usmerjanje atributov v ASP.NET Core

Usmerjevalna programska oprema za usmerjanje v ASP.NET Core vešče preslika dohodne zahteve ustreznim upravljavcem poti. Usmerjanje v ASP.NET Core lahko nastavite na dva različna načina: usmerjanje na podlagi atributov in usmerjanje na podlagi konvencij.

Za razliko od usmerjanja na osnovi konvencije, pri katerem so informacije o usmerjanju podane na enem mestu, usmerjanje atributov omogoča izvajanje usmerjanja z okrasitvijo akcijskih metod z atributi. Ta članek predstavlja razpravo o tem, kako lahko delujemo z usmerjanjem na podlagi atributov v ASP.NET Core MVC.

Če želite delati s primeri kod v tem članku, morate imeti v sistemu nameščen Visual Studio 2019. Če kopije še nimate, lahko Visual Studio 2019 prenesete tukaj.

Ustvarite projekt ASP.NET Core 3.1 MVC v Visual Studio 2019

Najprej ustvarimo projekt ASP.NET Core v Visual Studio 2019. Če predpostavimo, da je Visual Studio 2019 nameščen v vašem sistemu, sledite spodnjim korakom, da ustvarite nov projekt ASP.NET Core v Visual Studio.

  1. Zaženite Visual Studio IDE.
  2. Kliknite »Ustvari nov projekt«.
  3. V oknu »Ustvari nov projekt« na prikazanih seznamih predlog izberite »Spletna aplikacija ASP.NET Core«.
  4. Kliknite Naprej.
  5. V oknu »Konfiguriranje novega projekta« določite ime in mesto novega projekta.
  6. Izbirno potrdite polje »Rešitev in projekt postavite v isti imenik«, odvisno od vaših želja.
  7. Kliknite Ustvari.
  8. V naslednjem oknu »Ustvari novo spletno aplikacijo ASP.NET Core« izberite .NET Core kot izvajalno okolje in ASP.NET Core 3.1 (ali novejšo) s spustnega seznama na vrhu.
  9. Kot predlogo projekta izberite »Spletna aplikacija (Model-View-Controller)«, da ustvarite novo aplikacijo ASP.NET Core MVC.
  10. Prepričajte se, da sta potrditveni polji »Omogoči podporo za Docker« in »Konfiguriranje za HTTPS« odstranjeni, saj tukaj ne bomo uporabljali teh funkcij.
  11. Prepričajte se, da je preverjanje pristnosti nastavljeno na »Brez preverjanja pristnosti«, saj tudi preverjanja pristnosti ne bomo uporabljali.
  12. Kliknite Ustvari.

Po teh korakih boste ustvarili nov projekt ASP.NET Core MVC v Visual Studio 2019. Ta projekt bomo uporabili v spodnjih odsekih, da ponazorimo, kako lahko delamo z usmerjanjem atributov v ASP.NET Core 3.1.

Ustvarite razred krmilnika v ASP.NET Core MVC

Ustvarite nov krmilnik z imenom DefaultController in zamenjajte privzeto izvorno kodo DefaultController z naslednjo kodo:

  javni razred DefaultController: krmilnik

    {

[Pot ("")]

[Pot ("Privzeto")]

[Pot ("Privzeto / kazalo")]

indeks javnih rezultatov ()

        {

vrni novo EmptyResult ();

        }

[Route ("Default / GetRecordsById / {id}")]

javni ActionResult GetRecordsById (int id)

        {

string str = string.Format

("ID, poslan kot parameter, je: {0}", id);

vrni Ok (str);

        }

    }

Uporabite usmerjanje atributov na ravni krmilnika v ASP.NET Core

Usmerjanje atributov je mogoče uporabiti tako na ravni krmilnika kot metode delovanja. Če atribut poti uporabimo na ravni krmilnika, potem je pot veljavna za vse metode delovanja tega krmilnika.

Če preučite naš razred DefaultController, boste opazili, da je privzeta pot večkrat uporabljena pri podajanju predloge poti za metode dejanja. Naslednji delček kode prikazuje, kako lahko na ravni krmilnika določite različne atribute poti, da boste bolj prilagodljivo uporabili usmerjanje atributov.

[Pot ("Privzeto")]

javni razred DefaultController: krmilnik

{

[Pot ("")]

[Pot ("Kazalo")]

indeks javnega ActionResult ()

  {

vrni novo EmptyResult ();

   }

[HttpGet]

Pot ("Default / GetRecordsById / {id}")]

javni ActionResult GetRecordsById (int id)

  {

string str = string.Format ("ID, ki se posreduje kot parameter, je: {0}", id);

vrni Ok (str);

   }

}

Pri uporabi atributov poti tako na ravni krmilnika kot na metodi dejanja se predloga poti, uporabljena na ravni krmilnika, doda predlogi poti, podani na ravni metode dejanja.

Za krmilnik boste pogosto potrebovali skupno predpono. Ko to storite, uporabite atribut [RoutePrefix], kot je prikazano v spodnjem delčku kode.

[RoutePrefix ("storitve")]

javni razred HomeController: krmilnik

{

// Akcijske metode

}

Uporabite usmerjanje atributov na ravni metode dejanja v ASP.NET Core

Glejte zgornji razred DefaultController. Kot lahko vidite, smo v metodi Index razreda DefaultController določili tri poti. To pomeni, da bo vsak od naslednjih URL-jev sprožil metodo dejanja Index () privzetega krmilnika.

// localhost: 11277

// localhost: 11277 / domov

// localhost: 11277 / home / index

Kot pri usmerjanju na osnovi konvencij, lahko tudi pri usmerjanju na podlagi atributov podate parametre. Z drugimi besedami, usmerjanje na podlagi atributov vam omogoča, da s parametri podate atribute poti. Primer je metoda dejanja GetRecordsById prej prikazanega razreda DefaultController.

Upoštevajte, da "{id}" na navedeni poti predstavlja parameter ali držalo mesta. Parameter id v tem primeru je lahko karkoli, na primer niz ali celo število. Kaj pa, če želite parameter omejiti samo na cela števila? To lahko dosežete z uporabo omejitev.

V metodi dejanja uporabite omejitve poti atributov

Omejitve poti se uporabljajo za preprečevanje neveljavnih zahtev za dejanja krmilnika. Na primer, morda boste želeli zagotoviti, da je parameter, ki se posreduje metodi dejanja, vedno celo število. Sintaksa uporabe omejitev poti je {parameter: constraint}. Naslednji delček kode to ponazarja. Upoštevajte, da je tukaj parameter id vedno celo število.

[Route ("Default / GetRecordsById / {id: int}")]

javni ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID, ki se posreduje kot parameter, je: {0}", id);

vrni Ok (str);

}

V specifikacijah poti atributov uporabite neobvezne parametre

Neobvezne parametre lahko uporabite tudi v specifikaciji poti. Naslednji delček kode prikazuje, kako je to mogoče doseči. Upoštevajte, da bi bila metoda dejanja v tem primeru izvedena, tudi če parameter id ni poslan.

[Route ("Sales / GetSalesByRegionId / {id?}")]

Pomembno je razumeti, da pri uporabi usmerjanja atributov niti ime krmilnika niti ime metode dejanja ne igrata nobene vloge pri izbiri, katera metoda dejanja bo izvedena. Poglejmo to na primeru. Naslednji delček kode ponazarja, kako je bil spremenjen URL v specifikaciji poti za akcijsko metodo GetRecordsById.

[Pot ("Domov / GetRecordsById / {id: int}")]

javni ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID, ki se posreduje kot parameter, je: {0}", id);

vrni Ok (str);

}

Zdaj lahko prikličete metodo dejanja GetRecordsById z naslednjim URL-jem:

// localhost: 11277 / home / GetRecordsById / 1

V metodi dejanja uporabite več omejitev poti atributov

Za parameter lahko uporabite tudi več omejitev. Naslednji delček kode prikazuje, kako je to mogoče doseči. Najmanjša vrednost parametra id mora biti 1, sicer se vrne napaka 404.

[Route ("Default / GetRecordsById / {id: int: min (1)}")]

javni ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID, ki se posreduje kot parameter, je: {0}", id);

vrni Ok (str);

}

Uporabite glagole HTTP v poteh atributov v akcijski metodi

Pri usmerjanju atributov lahko celo uporabite glagole HTTP. Naslednji delček kode prikazuje, kako je to mogoče doseči.

[HttpGet]

[Route ("Default / GetRecordsById / {id: int: min (1)}")]

javni ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID, ki se posreduje kot parameter, je: {0}", id);

vrni Ok (str);

}

Pogosto uporabljene omejitve poti atributov

Tu je seznam najpogosteje uporabljenih omejitev poti v ASP.NET Core.

  • bool - uporablja se za ujemanje z logično vrednostjo
  • datetime - uporablja se za ujemanje vrednosti DateTime
  • decimalna - uporablja se za ujemanje z decimalno vrednostjo
  • dvojno - uporablja se za ujemanje 64-bitne vrednosti s plavajočo vejico
  • float - uporablja se za ujemanje 32-bitne vrednosti s plavajočo vejico
  • guide - uporablja se za ujemanje vrednosti GUID
  • int - uporablja se za ujemanje 32-bitne celoštevilske vrednosti
  • long - uporablja se za ujemanje s 64-bitno celoštevilčno vrednostjo
  • max - uporablja se za ujemanje celotnega števila z največjo vrednostjo
  • min - uporablja se za ujemanje s celim številom z najmanjšo vrednostjo
  • najmanjša dolžina - uporablja se za ujemanje niza z najmanjšo dolžino
  • regularni izraz - uporablja se za ujemanje z regularnim izrazom

Ustvarite omejitve poti atributov po meri

Omejitve poti po meri lahko ustvarite tudi tako, da ustvarite razred, ki razširja vmesnik IRouteConstraint in izvaja metodo Match, kot je prikazano v spodnjem delčku kode.

javni razred CustomRouteConstraint: IRouteConstraint

    {

javni bool Match (HttpContext httpContext, IRouter route,

string routeKey,

Vrednosti RouteValueDictionary, RouteDirection routeDirection)

        {

vrzi novo NotImplementedException ();

        }

    }

Uporabite zamenjavo žetona v poteh atributov na ravni krmilnika

Usmerjanje atributov v ASP.NET Core MVC nudi podporo za še eno zanimivo funkcijo, imenovano zamenjava žetona. V svojem krmilniku lahko uporabite žetone [action], [area] in [controller], ti žetoni pa bodo nadomeščeni z imeni dejanj, območij in krmilnikov. Naslednji delček kode prikazuje, kako je to mogoče doseči.

[Pot ("[krmilnik] / [dejanje]")]

javni razred HomeController: krmilnik

{

zasebno samo za branje ILogger _logger;

javni HomeController (zapisovalnik ILogger)

   {

_logger = logger;

   }

javni indeks IActionResult ()

   {

vrnitev View ();

   }

// Druge akcijske metode

}

Usmerjanje atributov v ASP.NET Core vam omogoča več nadzora in prilagodljivosti nad URI-ji v vaši spletni aplikaciji. Čeprav je mogoče usmerjanje, ki temelji na konvencijah, konfigurirati na enem mestu, kar se lahko nato uporabi za vse krmilnike v vaši aplikaciji, je težko podpirati določene vzorce URI (na primer različice API-jev) z usmerjanjem na podlagi konvencij.

Z uporabo usmerjanja atributov lahko ločite imena krmilnika in dejanj od predloge poti. V aplikacijah ASP.NET Core lahko uporabite celo kombinacijo usmerjanja na podlagi konvencij in usmerjanja na podlagi atributov.

Kako narediti več v ASP.NET Core:

  • Kako prenesti parametre v metode dejanja v ASP.NET Core MVC
  • Kako uporabljati analizatorje API v ASP.NET Core
  • Kako uporabljati žetone podatkov poti v ASP.NET Core
  • Kako uporabljati različice API v ASP.NET Core
  • Kako uporabljati predmete za prenos podatkov v ASP.NET Core 3.1
  • Kako obravnavati napake 404 v ASP.NET Core MVC
  • Kako uporabiti vbrizgavanje odvisnosti v akcijskih filtrih v ASP.NET Core 3.1
  • Kako uporabiti vzorec možnosti v ASP.NET Core
  • Kako uporabljati usmerjanje končnih točk v ASP.NET Core 3.0 MVC
  • Kako izvoziti podatke v Excel v ASP.NET Core 3.0
  • Kako uporabljati LoggerMessage v ASP.NET Core 3.0
  • Kako poslati e-pošto v ASP.NET Core
  • Kako zapisati podatke v SQL Server v ASP.NET Core
  • Kako razporediti delovna mesta z uporabo Quartz.NET v ASP.NET Core
  • Kako vrniti podatke iz spletnega API-ja ASP.NET Core
  • Kako oblikovati podatke o odzivih v ASP.NET Core
  • Kako porabiti spletni API ASP.NET Core s pomočjo RestSharp
  • Kako izvajati asinhrne operacije z uporabo Dapperja
  • Kako uporabljati zastavice funkcij v ASP.NET Core
  • Kako uporabljati atribut FromServices v ASP.NET Core
  • Kako delati s piškotki v ASP.NET Core
  • Kako delati s statičnimi datotekami v ASP.NET Core
  • Kako uporabiti prepisovanje URL-jev Middleware v ASP.NET Core
  • Kako implementirati omejevanje hitrosti v ASP.NET Core
  • Kako uporabljati Azure Application Insights v ASP.NET Core
  • Uporaba naprednih funkcij NLog v ASP.NET Core
  • Kako ravnati z napakami v spletnem API-ju ASP.NET
  • Kako implementirati globalno obravnavo izjem v ASP.NET Core MVC
  • Kako ravnati z ničelnimi vrednostmi v ASP.NET Core MVC
  • Napredno spreminjanje različic v ASP.NET Core Web API
  • Kako delati s storitvami za delavce v ASP.NET Core
  • Kako uporabljati API za zaščito podatkov v ASP.NET Core
  • Kako uporabljati pogojno vmesno programsko opremo v ASP.NET Core
  • Kako delati s stanjem seje v ASP.NET Core
  • Kako napisati učinkovite krmilnike v ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found