Kako se koristi usmjeravanje atributa u ASP.NET Core

Usmjerivački program za usmjeravanje u ASP.NET Core vješt je u mapiranju dolaznih zahtjeva na odgovarajuće rukovatelje rutama. Usmjeravanje u ASP.NET Core možete postaviti na dva različita načina: usmjeravanje temeljeno na atributima i usmjeravanje temeljeno na konvencijama.

Za razliku od usmjeravanja temeljenog na konvencijama, u kojem su podaci o usmjeravanju navedeni na jednom mjestu, usmjeravanje atributa omogućuje vam provođenje usmjeravanja ukrašavanjem metoda djelovanja atributima. Ovaj članak predstavlja raspravu o tome kako možemo raditi s usmjeravanjem temeljenim na atributima u ASP.NET Core MVC.

Da biste radili s primjerima koda iz ovog članka, u sustavu biste trebali instalirati Visual Studio 2019. Ako još nemate kopiju, ovdje možete preuzeti Visual Studio 2019. 

Stvorite ASP.NET Core 3.1 MVC projekt u Visual Studio 2019

Prvo, kreirajmo ASP.NET Core projekt u Visual Studio 2019. Pod pretpostavkom da je Visual Studio 2019 instaliran u vašem sustavu, slijedite korake opisane u nastavku da biste stvorili novi ASP.NET Core projekt u Visual Studio.

  1. Pokrenite Visual Studio IDE.
  2. Kliknite "Stvori novi projekt".
  3. U prozoru "Stvori novi projekt" s popisa predložaka odaberite "ASP.NET Core Web Application".
  4. Kliknite Dalje.
  5. U prozoru „Konfiguriranje novog projekta“ navedite naziv i mjesto za novi projekt.
  6. Po želji potvrdite okvir "Smjesti rješenje i projekt u isti direktorij", ovisno o vašim željama.
  7. Kliknite Stvori.
  8. U sljedećem prozoru "Stvaranje nove web-aplikacije ASP.NET Core" odaberite .NET Core kao vrijeme izvođenja i ASP.NET Core 3.1 (ili noviju) s padajućeg popisa na vrhu.
  9. Odaberite „Web aplikacija (Model-View-Controller)“ kao predložak projekta za stvaranje nove ASP.NET Core MVC aplikacije. 
  10. Obavezno označite potvrdne okvire "Omogući podršku za Docker" i "Konfiguriraj za HTTPS" jer ovdje nećemo koristiti te značajke.
  11. Provjerite je li provjera autentičnosti postavljena na "Bez provjere autentičnosti" jer ni mi nećemo koristiti provjeru autentičnosti.
  12. Kliknite Stvori.

Slijedeći ove korake stvorit će se novi ASP.NET Core MVC projekt u Visual Studio 2019. Ovaj ćemo projekt koristiti u odjeljcima u nastavku kako bismo ilustrirali kako možemo raditi s usmjeravanjem atributa u ASP.NET Core 3.1.

Stvorite klasu kontrolera u ASP.NET Core MVC

Stvorite novi kontroler nazvan DefaultController i zamijenite zadani izvorni kod DefaultControllera sljedećim kodom:

    javna klasa DefaultController: Controller

    {

        [Ruta ("")]

        [Ruta ("Zadana")]

        [Ruta ("Zadani / indeks")]

        indeks javnog ActionResult ()

        {

            vrati novi EmptyResult ();

        }

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

        javni ActionResult GetRecordsById (int id)

        {

            string str = string.Format

            ("ID koji se prosljeđuje kao parametar je: {0}", id);

            povratak Ok (str);

        }

    }

Koristite usmjeravanje atributa na razini kontrolera u ASP.NET Core

Usmjeravanje atributa može se koristiti i na razini kontrolera i na razini radnje. Ako primijenimo atribut rute na razini kontrolera, tada je ruta primjenjiva na sve metode djelovanja tog kontrolera.

Ako pregledate našu klasu DefaultController, primijetit ćete da se zadana ruta koristi više puta prilikom određivanja predloška rute za metode djelovanja. Sljedeći isječak koda pokazuje kako možete navesti različite atribute rute na razini kontrolera kako biste fleksibilnije koristili usmjeravanje atributa.

[Ruta ("Zadana")]   

javna klasa DefaultController: Controller

{

  [Ruta ("")]

  [Ruta ("Kazalo")]

  indeks javnog ActionResult ()

  {

      vrati novi EmptyResult ();

   }

  [HttpGet]

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

  javni ActionResult GetRecordsById (int id)

  {

      string str = string.Format ("ID koji se prosljeđuje kao parametar je: {0}", id);

      povratak Ok (str);

   }

}

Kada se koriste atributi rute i na razini kontrolera i na metodi radnje, predložak rute primijenjen na razini kontrolera dodaje se predlošku rute navedenom na razini metode djelovanja.

Često će vam trebati zajednički prefiks za vaš kontroler. Kada to učinite, trebali biste upotrijebiti atribut [RoutePrefix] kako je prikazano u isječku koda koji je dan u nastavku.

[RoutePrefix ("usluge")]

Javna klasa HomeController: Kontroler

{

   // Metode djelovanja

}

Koristite usmjeravanje atributa na razini metode akcije u ASP.NET Core

Pogledajte klasu DefaultController prikazanu gore. Kao što vidite, odredili smo tri rute u metodi Index klase DefaultController. To podrazumijeva da će svaki od sljedećih URL-ova pozvati metodu radnje Index () DefaultControllera.

// localhost: 11277

// localhost: 11277 / dom

// localhost: 11277 / home / index

Kao i u usmjeravanju temeljenom na konvencijama, možete odrediti parametre i u usmjeravanju temeljenom na atributima. Drugim riječima, usmjeravanje temeljeno na atributima omogućuje vam određivanje atributa rute s parametrima. Primjer je prethodno prikazana metoda akcije GetRecordsById klase DefaultController koja je ranije prikazana.

Imajte na umu da "{id}" u navedenoj ruti predstavlja parametar ili držač mjesta. Parametar id u ovom primjeru može biti bilo što, poput niza ili cijelog broja. Što ako parametar želite ograničiti samo na cijele brojeve? To možete postići korištenjem ograničenja.

Upotrijebite ograničenja rute atributa u akcijskoj metodi

Ograničenja rute koriste se za sprečavanje nevaljanih zahtjeva za radnje kontrolera. Na primjer, možda biste trebali osigurati da parametar prosljeđen metodi radnje uvijek bude cijeli broj. Sintaksa korištenja ograničenja rute je {parameter: constraint}. Sljedeći isječak koda to ilustrira. Imajte na umu da je ovdje parametar id uvijek cijeli broj.

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

javni ActionResult GetRecordsById (int id)

{

  string str = string.Format ("ID koji se prosljeđuje kao parametar je: {0}", id);

  povratak Ok (str);

}

Upotrijebite neobavezne parametre u specifikacijama rute atributa

Neobavezne parametre možete koristiti i u specifikaciji rute. Sljedeći isječak koda pokazuje kako se to može postići. Imajte na umu da bi se metoda akcije u ovom slučaju izvršila čak i ako parametar id nije proslijeđen.

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

Važno je shvatiti da pri korištenju usmjeravanja atributa niti ime kontrolera niti ime metode radnje ne igraju nikakvu ulogu u odabiru koja će se metoda akcije izvršiti. Pogledajmo ovo na primjeru. Sljedeći isječak koda ilustrira kako je URL promijenjen u specifikaciji rute za akcijsku metodu GetRecordsById.

[Ruta ("Početna / GetRecordsById / {id: int}")]

javni ActionResult GetRecordsById (int id)

{

   string str = string.Format ("ID koji se prosljeđuje kao parametar je: {0}", id);

   povratak Ok (str);

}

Sada se možete pozvati na metodu akcije GetRecordsById pomoću sljedećeg URL-a:

// localhost: 11277 / home / GetRecordsById / 1

U akcijskoj metodi koristite više ograničenja rute atributa

Također je moguće primijeniti višestruka ograničenja na parametar. Sljedeći isječak koda ilustrira kako se to može postići. Imajte na umu da bi minimalna vrijednost parametra id trebala biti 1, inače će se vratiti pogreška 404.

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

javni ActionResult GetRecordsById (int id)

{

    string str = string.Format ("ID koji se prosljeđuje kao parametar je: {0}", id);

    povratak Ok (str);

}

Koristite HTTP glagole u rutama atributa u akcijskoj metodi

U usmjeravanju atributa možete čak koristiti i HTTP glagole. Sljedeći isječak koda pokazuje kako se to može postići.

[HttpGet]

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

javni ActionResult GetRecordsById (int id)

{

  string str = string.Format ("ID koji se prosljeđuje kao parametar je: {0}", id);

  povratak Ok (str);

}

Uobičajena ograničenja rute atributa 

Evo popisa najčešće korištenih ograničenja rute u ASP.NET Coreu. 

  • bool - koristi se za podudaranje logičke vrijednosti
  • datetime - koristi se za podudaranje vrijednosti DateTime
  • decimalni - koristi se za podudaranje decimalne vrijednosti
  • double - koristi se za podudaranje 64-bitne vrijednosti s pomičnom zarezom
  • float - koristi se za podudaranje s 32-bitnom vrijednošću s pomičnim zarezom
  • guide - koristi se za podudaranje vrijednosti GUID-a
  • int - koristi se za podudaranje 32-bitne cjelobrojne vrijednosti
  • dugo - koristi se za podudaranje 64-bitne cjelobrojne vrijednosti
  • max - koristi se za podudaranje cijelog broja s maksimalnom vrijednošću
  • min - koristi se za podudaranje cijelog broja s minimalnom vrijednošću
  • minlength - koristi se za podudaranje niza minimalne duljine
  • regularni izraz - koristi se za podudaranje s regularnim izrazom

Stvorite ograničenja prilagođenih ruta atributa 

Također možete stvoriti vlastita prilagođena ograničenja rute stvaranjem klase koja proširuje sučelje IRouteConstraint i implementira metodu Match kako je prikazano u isječku koda koji je dat u nastavku.

javna klasa CustomRouteConstraint: IRouteConstraint

    {

        javni bool Match (HttpContext httpContext, IRouter route,

        string routeKey,

        RouteValueDictionary vrijednosti, RouteDirection routeDirection)

        {

            baciti novi NotImplementedException ();

        }

    }

Koristite zamjenu tokena u rutama atributa na razini kontrolera

Usmjeravanje atributa u ASP.NET Core MVC pruža podršku za još jednu zanimljivu značajku koja se naziva zamjena tokena. Možete koristiti tokene [action], [area] i [controller] u svom upravljaču, a ti će tokeni biti zamijenjeni imenima radnje, područja i kontrolera. Sljedeći isječak koda ilustrira kako se to može postići.

[Ruta ("[kontroler] / [akcija]")]

Javna klasa HomeController: Kontroler

{

   privatno samo za čitanje ILogger _logger;

   javni HomeController (ILogger zapisovač)

   {

       _logger = zapisničar;

   }

   javni indeks IActionResult ()

   {

       povratak View ();

   }

   // Ostale metode djelovanja

}

Usmjeravanje atributa u ASP.NET Core pruža vam veću kontrolu i fleksibilnost nad URI-ima u vašoj web aplikaciji. Iako se usmjeravanje temeljeno na konvencijama može konfigurirati na jednom mjestu, što se zauzvrat može primijeniti na sve kontrolere u vašoj aplikaciji, teško je podržati određene URI uzorke (poput API-ja verzija) usmjeravanjem temeljenim na konvencijama.

Korištenjem usmjeravanja atributa možete odvojiti imena kontrolera i radnji od predloška rute. Možete čak koristiti kombinaciju usmjeravanja temeljenog na konvencijama i usmjeravanja temeljenog na atributima u svojim ASP.NET Core aplikacijama.

Kako učiniti više u ASP.NET Coreu:

  • Kako proslijediti parametre metodama akcije u ASP.NET Core MVC
  • Kako koristiti API analizatore u ASP.NET Coreu
  • Kako koristiti tokene podataka rute u ASP.NET Core
  • Kako koristiti API izradu verzija u ASP.NET Coreu
  • Kako koristiti objekte za prijenos podataka u ASP.NET Core 3.1
  • Kako postupati s pogreškama 404 u ASP.NET Core MVC
  • Kako se koristi injekcija ovisnosti u akcijskim filtrima u ASP.NET Core 3.1
  • Kako se koristi obrazac opcija u ASP.NET Core
  • Kako se koristi usmjeravanje krajnje točke u ASP.NET Core 3.0 MVC
  • Kako izvesti podatke u Excel u ASP.NET Core 3.0
  • Kako koristiti LoggerMessage u ASP.NET Core 3.0
  • Kako poslati e-poštu u ASP.NET Core
  • Kako prijaviti podatke na SQL Server u ASP.NET Core
  • Kako rasporediti poslove pomoću Quartz.NET-a u ASP.NET Core
  • Kako vratiti podatke s ASP.NET Core Web API-ja
  • Kako oblikovati podatke o odgovoru u ASP.NET Core
  • Kako konzumirati ASP.NET Core Web API pomoću RestSharp
  • Kako izvesti asinkrne operacije pomoću Dappera
  • Kako koristiti zastavice značajki u ASP.NET Coreu
  • Kako koristiti atribut FromServices u ASP.NET Core
  • Kako raditi s kolačićima u ASP.NET Coreu
  • Kako raditi sa statičkim datotekama u ASP.NET Coreu
  • Kako koristiti URL za prepisivanje Middlewarea u ASP.NET Core
  • Kako implementirati ograničenje brzine u ASP.NET Core
  • Kako koristiti Azure Application Insights u ASP.NET Core
  • Korištenje naprednih značajki NLog u ASP.NET Core
  • Kako postupati s pogreškama u ASP.NET web API-ju
  • Kako implementirati globalno rukovanje iznimkama u ASP.NET Core MVC
  • Kako postupati s null vrijednostima u ASP.NET Core MVC
  • Napredna verzija u ASP.NET Core Web API
  • Kako raditi s uslugama za radnike u ASP.NET Coreu
  • Kako koristiti API zaštite podataka u ASP.NET Core
  • Kako se koristi uvjetni međuprodukt u ASP.NET Coreu
  • Kako raditi sa stanjem sesije u ASP.NET Coreu
  • Kako napisati učinkovite kontrolere u ASP.NET Core