Programmering

Hvordan bruke attributtruting i ASP.NET Core

Rutemellomvaren i ASP.NET Core er dyktig til å kartlegge innkommende forespørsler til de respektive rutebehandlerne. Du kan konfigurere ruting i ASP.NET Core på to forskjellige måter: attributtbasert ruting og konvensjonsbasert ruting.

I motsetning til konvensjonsbasert ruting, der rutingsinformasjonen er spesifisert på ett sted, lar attributtruting deg implementere ruting ved å dekorere handlingsmetodene dine med attributter. Denne artikkelen presenterer en diskusjon om hvordan vi kan jobbe med attributtbasert ruting i ASP.NET Core MVC.

For å jobbe med kodeeksemplene som er gitt i denne artikkelen, bør du ha Visual Studio 2019 installert på systemet ditt. Hvis du ikke allerede har en kopi, kan du laste ned Visual Studio 2019 her.

Opprett et ASP.NET Core 3.1 MVC-prosjekt i Visual Studio 2019

For det første, la oss lage et ASP.NET Core-prosjekt i Visual Studio 2019. Forutsatt at Visual Studio 2019 er installert i systemet ditt, følger du trinnene som er beskrevet nedenfor for å opprette et nytt ASP.NET Core-prosjekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klikk på "Opprett nytt prosjekt."
  3. I vinduet "Opprett nytt prosjekt" velger du "ASP.NET Core Web Application" fra listen over maler som vises.
  4. Klikk på Neste.
  5. I vinduet "Konfigurer ditt nye prosjekt" angir du navnet og stedet for det nye prosjektet.
  6. Merk av for "Plasser løsning og prosjekt i samme katalog", avhengig av dine preferanser.
  7. Klikk på Opprett.
  8. I vinduet "Opprett et nytt ASP.NET Core Web Application" som vises, velger du .NET Core som kjøretid og ASP.NET Core 3.1 (eller senere) fra rullegardinlisten øverst.
  9. Velg "Web Application (Model-View-Controller)" som prosjektmal for å opprette et nytt ASP.NET Core MVC-program.
  10. Forsikre deg om at avmerkingsboksene "Aktiver Docker-støtte" og "Konfigurer for HTTPS" ikke er merket av da vi ikke bruker disse funksjonene her.
  11. Forsikre deg om at autentisering er satt til "ingen godkjenning", da vi heller ikke bruker autentisering.
  12. Klikk på Opprett.

Ved å følge disse trinnene vil det opprette et nytt ASP.NET Core MVC-prosjekt i Visual Studio 2019. Vi bruker dette prosjektet i avsnittene nedenfor for å illustrere hvordan vi kan jobbe med attributtruting i ASP.NET Core 3.1.

Opprett en kontrollerklasse i ASP.NET Core MVC

Opprett en ny kontroller som heter DefaultController, og erstatt standardkildekoden til DefaultController med følgende kode:

  offentlig klasse DefaultController: Controller

    {

[Rute("")]

[Rute ("Standard")]

[Rute ("Standard / indeks")]

offentlig ActionResult-indeks ()

        {

returner nye EmptyResult ();

        }

[Rute ("Standard / GetRecordsById / {id}")]

offentlig ActionResult GetRecordsById (int id)

        {

streng str = streng.Format

("ID-en som er sendt som parameter er: {0}", id);

returnere Ok (str);

        }

    }

Bruk attributtruting på kontrollernivå i ASP.NET Core

Attributtruting kan brukes både på kontroller- og handlingsmetodenivå. Hvis vi bruker ruteattributtet på kontrollernivå, gjelder ruten for alle handlingsmetoder for den kontrolleren.

Hvis du undersøker StandardController-klassen, vil du se at standardruten brukes flere ganger når du spesifiserer rutemalen for handlingsmetodene. Følgende kodebit viser hvordan du kan spesifisere forskjellige ruteattributter på kontrollernivå for å gjøre mer fleksibel bruk av attributtruting.

[Rute ("Standard")]

offentlig klasse DefaultController: Controller

{

[Rute("")]

[Rute ("Indeks")]

offentlig ActionResult-indeks ()

  {

returner nye EmptyResult ();

   }

[HttpGet]

Rute ("Standard / GetRecordsById / {id}")]

offentlig ActionResult GetRecordsById (int id)

  {

string str = string.Format ("ID-en som er sendt som parameter er: {0}", id);

returnere Ok (str);

   }

}

Når du bruker ruteattributter både på kontrolleren og handlingsmetodenivået, blir rutemalen som brukes på kontrollernivået forhåndsstilt til rutemalen som er spesifisert på handlingsmetodenivået.

Du trenger ofte et vanlig prefiks for kontrolleren din. Når du gjør det, bør du bruke [RoutePrefix] -attributtet som vist i kodebiten gitt nedenfor.

[RoutePrefix ("tjenester")]

offentlig klasse HomeController: Controller

{

// Handlingsmetoder

}

Bruk attributtruting på handlingsmetodenivå i ASP.NET Core

Se StandardController-klassen vist ovenfor. Som du kan se, har vi spesifisert tre ruter i indeksmetoden i StandardController-klassen. Dette innebærer at hver av de følgende URL-ene vil påkalle handlingsmetoden Index () til DefaultController.

// lokal vert: 11277

// localhost: 11277 / hjem

// localhost: 11277 / home / index

Som i konvensjonsbasert ruting kan du også spesifisere parametere i attributtbasert ruting. Med andre ord lar attributtbasert ruting deg spesifisere ruteattributter med parametere. Handlingsmetoden GetRecordsById i klassen DefaultController vist tidligere er et eksempel.

Merk at "{id}" i den angitte ruten representerer en parameter eller en plassholder. ID-parameteren i dette eksemplet kan være hva som helst, for eksempel en streng eller et helt tall. Hva om du vil begrense parameteren til bare heltall? Du kan oppnå dette ved å bruke begrensninger.

Bruk begrensninger for attributtruter i en handlingsmetode

Rutebegrensninger brukes til å hindre ugyldige forespørsler om handlinger fra kontrolleren. Det kan for eksempel være lurt å sikre at parameteren som sendes til en handlingsmetode alltid er et helt tall. Syntaksen for å bruke rutebegrensninger er {parameter: begrensning}. Følgende kodebit illustrerer dette. Merk at id-parameteren her alltid er et helt tall.

[Rute ("Standard / GetRecordsById / {id: int}")]

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID-en som er sendt som parameter er: {0}", id);

returnere Ok (str);

}

Bruk valgfrie parametere i attributtspesifikasjoner

Du kan også bruke valgfrie parametere i rutespesifikasjonen. Følgende kodebit viser hvordan dette kan oppnås. Merk at handlingsmetoden i dette tilfellet vil bli utført selv om id-parameteren ikke blir sendt.

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

Det er viktig å forstå at hverken kontrollernavnet eller handlingsmetodens navn spiller noen rolle i valg av handlingsmetode som skal kjøres når du bruker attributtruting. La oss se dette med et eksempel. Følgende kodebit illustrerer hvordan URL-en er endret i rutespesifikasjonen for GetRecordsById-handlingsmetoden.

[Rute ("Hjem / GetRecordsById / {id: int}")]

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID-en som er sendt som parameter er: {0}", id);

returnere Ok (str);

}

Du kan nå påkalle GetRecordsById-handlingsmetoden ved hjelp av følgende URL:

// localhost: 11277 / home / GetRecordsById / 1

Bruk flere attributtbegrensninger i en handlingsmetode

Det er også mulig å bruke flere begrensninger på en parameter. Følgende kodebit illustrerer hvordan dette kan oppnås. Vær oppmerksom på at minimumverdien for id-parameteren skal være 1, ellers returneres en 404-feil.

[Rute ("Standard / GetRecordsById / {id: int: min (1)}")]

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID-en som er sendt som parameter er: {0}", id);

returnere Ok (str);

}

Bruk HTTP-verb i attributtruter i en handlingsmetode

Du kan til og med bruke HTTP-verb i attributtruting. Følgende kodebit viser hvordan dette kan oppnås.

[HttpGet]

[Rute ("Standard / GetRecordsById / {id: int: min (1)}")]

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("ID-en som er sendt som parameter er: {0}", id);

returnere Ok (str);

}

Vanlige rutebegrensninger for attributter

Her er en liste over de mest brukte rutebegrensningene i ASP.NET Core.

  • bool - brukes til å matche en boolsk verdi
  • datetime - brukes til å matche en DateTime-verdi
  • desimal - brukes til å matche en desimalverdi
  • dobbel - brukes til å matche en 64-biters flytpunkt
  • float - brukes til å matche en 32-biters flytpunktsverdi
  • guid - brukes til å matche en GUID-verdi
  • int - brukes til å matche en 32-biters heltallsverdi
  • lang - brukes til å matche en 64-biters heltallsverdi
  • max - brukes til å matche et heltall med en maksimumsverdi
  • min - brukes til å matche et heltall med en minimumsverdi
  • minlength - brukes til å matche en streng med en minimumslengde
  • regex - brukes til å matche et vanlig uttrykk

Lag egendefinerte attributtrutebegrensninger

Du kan også lage dine egne tilpassede rutebegrensninger ved å opprette en klasse som utvider IRouteConstraint-grensesnittet og implementerer Match-metoden som vist i kodebiten gitt nedenfor.

offentlig klasse CustomRouteConstraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter rute,

strengruteKey,

RouteValueDictionary verdier, RouteDirection routeDirection)

        {

kaste nye NotImplementedException ();

        }

    }

Bruk utskifting av token i attributtruter på kontrollernivå

Attributtruting i ASP.NET Core MVC gir støtte for en annen interessant funksjon som heter token replacement. Du kan bruke tokens [action], [area] og [controller] i kontrolleren din, og disse tokens blir erstattet av henholdsvis handlings-, areal- og controller-navnene. Følgende kodebit illustrerer hvordan dette kan oppnås.

[Rute ("[kontroller] / [handling]")]

offentlig klasse HomeController: Controller

{

privat readonly ILogger _logger;

offentlig HomeController (ILogger logger)

   {

_logger = logger;

   }

offentlig IActionResult-indeks ()

   {

return Vis ();

   }

// Andre handlingsmetoder

}

Attributtruting i ASP.NET Core gir deg mer kontroll og fleksibilitet over URI-ene i webapplikasjonen. Selv om konvensjonsbasert ruting kan konfigureres på ett sted, som igjen kan brukes på alle kontrollere i applikasjonen din, er det vanskelig å støtte visse URI-mønstre (for eksempel API-versjonering) med konvensjonsbasert ruting.

Ved å bruke attributtruting kan du koble kontrolleren og handlingsnavn fra rutemalen. Du kan til og med bruke en kombinasjon av konvensjonsbasert ruting og attributtbasert ruting i ASP.NET Core-applikasjonene.

Hvordan gjøre mer i ASP.NET Core:

  • Hvordan overføre parametere til handlingsmetoder i ASP.NET Core MVC
  • Hvordan bruke API-analysatorer i ASP.NET Core
  • Hvordan bruke rutedata tokens i ASP.NET Core
  • Hvordan bruke API-versjonering i ASP.NET Core
  • Hvordan bruke dataoverføringsobjekter i ASP.NET Core 3.1
  • Hvordan håndtere 404 feil i ASP.NET Core MVC
  • Hvordan bruke avhengighetsinjeksjon i handlingsfiltre i ASP.NET Core 3.1
  • Hvordan bruke alternativmønsteret i ASP.NET Core
  • Hvordan bruke endepunktsruting i ASP.NET Core 3.0 MVC
  • Slik eksporterer du data til Excel i ASP.NET Core 3.0
  • Hvordan bruke LoggerMessage i ASP.NET Core 3.0
  • Hvordan sende e-post i ASP.NET Core
  • Hvordan logge data til SQL Server i ASP.NET Core
  • Hvordan planlegge jobber med Quartz.NET i ASP.NET Core
  • Hvordan returnere data fra ASP.NET Core Web API
  • Hvordan formatere svardata i ASP.NET Core
  • Slik bruker du et ASP.NET Core Web API ved hjelp av RestSharp
  • Hvordan utføre asynkroniseringsoperasjoner ved hjelp av Dapper
  • Hvordan bruke funksjonsflagg i ASP.NET Core
  • Hvordan bruke attributtet FromServices i ASP.NET Core
  • Hvordan jobbe med informasjonskapsler i ASP.NET Core
  • Hvordan jobbe med statiske filer i ASP.NET Core
  • Hvordan bruke URL Rewriting Middleware i ASP.NET Core
  • Hvordan implementere hastighetsbegrensning i ASP.NET Core
  • Hvordan bruke Azure Application Insights i ASP.NET Core
  • Bruker avanserte NLog-funksjoner i ASP.NET Core
  • Hvordan håndtere feil i ASP.NET Web API
  • Hvordan implementere global unntaksbehandling i ASP.NET Core MVC
  • Hvordan håndtere nullverdier i ASP.NET Core MVC
  • Avansert versjonering i ASP.NET Core Web API
  • Hvordan jobbe med arbeidstjenester i ASP.NET Core
  • Hvordan bruke API for databeskyttelse i ASP.NET Core
  • Hvordan bruke betinget mellomvare i ASP.NET Core
  • Hvordan jobbe med økttilstand i ASP.NET Core
  • Hvordan skrive effektive kontrollere i ASP.NET Core
$config[zx-auto] not found$config[zx-overlay] not found