Programmering

Sådan bruges attributrute i ASP.NET Core

Routing-middlewaren i ASP.NET Core er dygtig til at kortlægge indgående anmodninger til de respektive rutehåndterere. Du kan konfigurere routing i ASP.NET Core på to forskellige måder: attributbaseret routing og convention-baseret routing.

I modsætning til konventionbaseret routing, hvor routingoplysningerne er specificeret på et enkelt sted, giver attributrute dig mulighed for at implementere routing ved at dekorere dine handlingsmetoder med attributter. Denne artikel præsenterer en diskussion af, hvordan vi kan arbejde med attributbaseret routing i ASP.NET Core MVC.

For at arbejde med kodeeksemplerne i denne artikel skal du have Visual Studio 2019 installeret i dit system. Hvis du ikke allerede har en kopi, kan du downloade Visual Studio 2019 her.

Opret et ASP.NET Core 3.1 MVC-projekt i Visual Studio 2019

Lad os først oprette et ASP.NET Core-projekt i Visual Studio 2019. Forudsat at Visual Studio 2019 er installeret i dit system, skal du følge nedenstående trin for at oprette et nyt ASP.NET Core-projekt i Visual Studio.

  1. Start Visual Studio IDE.
  2. Klik på "Opret nyt projekt."
  3. I vinduet "Opret nyt projekt" skal du vælge "ASP.NET Core Web Application" fra listen over skabeloner, der vises.
  4. Klik på Næste.
  5. I vinduet "Konfigurer dit nye projekt" skal du angive navnet og placeringen for det nye projekt.
  6. Marker afkrydsningsfeltet "Placer løsning og projekt i samme bibliotek" afhængigt af dine præferencer.
  7. Klik på Opret.
  8. I vinduet "Opret en ny ASP.NET Core-webapplikation", der vises derefter, skal du vælge .NET Core som runtime og ASP.NET Core 3.1 (eller senere) fra rullelisten øverst.
  9. Vælg "Webapplikation (Model-View-Controller)" som projektskabelon for at oprette et nyt ASP.NET Core MVC-program.
  10. Sørg for, at afkrydsningsfelterne "Aktivér Docker-support" og "Konfigurer til HTTPS" ikke er markeret, da vi ikke bruger disse funktioner her.
  11. Sørg for, at godkendelse er indstillet til "Ingen godkendelse", da vi heller ikke bruger godkendelse.
  12. Klik på Opret.

Ved at følge disse trin oprettes et nyt ASP.NET Core MVC-projekt i Visual Studio 2019. Vi bruger dette projekt i nedenstående afsnit til at illustrere, hvordan vi kan arbejde med attributrute i ASP.NET Core 3.1.

Opret en controller-klasse i ASP.NET Core MVC

Opret en ny controller med navnet DefaultController, og erstat standardkildekoden til DefaultController med følgende kode:

  offentlig klasse DefaultController: Controller

    {

[Rute("")]

[Rute ("Standard")]

[Rute ("Standard / indeks")]

offentligt ActionResult-indeks ()

        {

returner nyt EmptyResult ();

        }

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

offentlig ActionResult GetRecordsById (int id)

        {

streng str = streng.Format

("Id'et, der blev sendt som parameter, er: {0}", id);

returnere Ok (str);

        }

    }

Brug routing af attributter på controllerniveau i ASP.NET Core

Attributrute kan bruges både på controller- og handlingsmetodeniveau. Hvis vi anvender ruteattributten på controller-niveau, er ruten gældende for alle handlingsmetoder for den pågældende controller.

Hvis du undersøger vores StandardController-klasse, vil du bemærke, at Standardruten bruges flere gange, når du angiver ruteskabelonen til handlingsmetoderne. Følgende kodestykke viser, hvordan du kan specificere forskellige ruteattributter på controllerniveau for at gøre mere fleksibel brug af attributrute.

[Rute ("Standard")]

offentlig klasse DefaultController: Controller

{

[Rute("")]

[Rute ("Indeks")]

offentligt ActionResult-indeks ()

  {

returner nyt EmptyResult ();

   }

[HttpGet]

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

offentlig ActionResult GetRecordsById (int id)

  {

string str = string.Format ("Id'et, der er sendt som parameter, er: {0}", id);

returnere Ok (str);

   }

}

Når du bruger ruteattributter både på controller- og handlingsmetodeniveauer, er den ruteskabelon, der anvendes på controller-niveau, forud for den ruteskabelon, der er angivet på handlingsmetodeniveau.

Du har ofte brug for et fælles præfiks til din controller. Når du gør det, skal du bruge attributten [RoutePrefix] som vist i kodeuddraget nedenfor.

[RoutePrefix ("tjenester")]

offentlig klasse HomeController: Controller

{

// Handlingsmetoder

}

Brug attributrute på handlingsmetodeniveau i ASP.NET Core

Se StandardController-klassen vist ovenfor. Som du kan se, har vi angivet tre ruter i indeksmetoden i klassen DefaultController. Dette indebærer, at hver af de følgende URL'er påberåber sig indeks () -handlingsmetoden i DefaultController.

// localhost: 11277

// localhost: 11277 / hjem

// localhost: 11277 / home / index

Som i konventionbaseret routing kan du også specificere parametre i attributbaseret routing. Med andre ord giver attributbaseret routing dig mulighed for at specificere ruteattributter med parametre. Handlingsmetoden GetRecordsById i klassen DefaultController, der er vist tidligere, er et eksempel.

Bemærk, at "{id}" i den angivne rute repræsenterer en parameter eller en pladsholder. Id-parameteren i dette eksempel kan være hvad som helst, såsom en streng eller et heltal. Hvad hvis du vil begrænse parameteren til kun heltal? Du kan opnå dette ved at bruge begrænsninger.

Brug begrænsninger for attributruter i en handlingsmetode

Rutebegrænsninger bruges til at modvirke ugyldige anmodninger om controllerhandlinger. For eksempel vil du muligvis sikre, at parameteren, der sendes til en handlingsmetode, altid er et heltal. Syntaksen for at bruge rutebegrænsninger er {parameter: begrænsning}. Følgende kodestykke illustrerer dette. Bemærk, at id-parameteren her altid er et heltal.

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

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("Id'et, der er sendt som parameter, er: {0}", id);

returnere Ok (str);

}

Brug valgfri parametre i attributrute specifikationer

Du kan også bruge valgfri parametre i din rutespecifikation. Følgende kodestykke viser, hvordan dette kan opnås. Bemærk, at handlingsmetoden i dette tilfælde ville blive udført, selvom id-parameteren ikke overføres.

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

Det er vigtigt at forstå, at hverken controllerens navn eller handlingsmetodens navn spiller nogen rolle i valg af hvilken handlingsmetode, der skal udføres, når man bruger attributrute. Lad os se dette med et eksempel. Følgende kodestykke illustrerer, hvordan URL-adressen er blevet ændret i rutespecifikationen for handlingsmetoden GetRecordsById.

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

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("Id'et, der er sendt som parameter, er: {0}", id);

returnere Ok (str);

}

Du kan nu påberåbe sig handlingsmetoden GetRecordsById ved hjælp af følgende URL:

// localhost: 11277 / home / GetRecordsById / 1

Brug flere attributrute begrænsninger i en handlingsmetode

Det er også muligt at anvende flere begrænsninger for en parameter. Følgende kodestykke illustrerer, hvordan dette kan opnås. Bemærk, at minimumsværdien af ​​id-parameteren skal være 1, ellers returneres en 404-fejl.

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

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("Id'et, der er sendt som parameter, er: {0}", id);

returnere Ok (str);

}

Brug HTTP-verb i attributruter i en handlingsmetode

Du kan endda bruge HTTP-verb i attributrute. Følgende kodestykke viser, hvordan dette kan opnås.

[HttpGet]

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

offentlig ActionResult GetRecordsById (int id)

{

string str = string.Format ("Id'et, der er sendt som parameter, er: {0}", id);

returnere Ok (str);

}

Almindeligt anvendte attributrute begrænsninger

Her er en liste over de mest anvendte rutebegrænsninger i ASP.NET Core.

  • bool - bruges til at matche en boolsk værdi
  • datetime - bruges til at matche en DateTime-værdi
  • decimal - bruges til at matche en decimalværdi
  • dobbelt - bruges til at matche en 64-bit floating-point-værdi
  • float - bruges til at matche en 32-bit floating-point værdi
  • guid - bruges til at matche en GUID-værdi
  • int - bruges til at matche en 32-bit heltal værdi
  • lang - bruges til at matche en 64-bit heltal værdi
  • max - bruges til at matche et heltal med en maksimumsværdi
  • min - bruges til at matche et heltal med en minimumsværdi
  • minlængde - bruges til at matche en streng med en minimumslængde
  • regex - bruges til at matche et regulært udtryk

Opret brugerdefinerede attributrute begrænsninger

Du kan også oprette dine egne brugerdefinerede rutebegrænsninger ved at oprette en klasse, der udvider IRouteConstraint-grænsefladen og implementerer Match-metoden som vist i kodestykket nedenfor.

offentlig klasse CustomRouteConstraint: IRouteConstraint

    {

public bool Match (HttpContext httpContext, IRouter-rute,

streng ruteKey,

RouteValueDictionary-værdier, RouteDirection routeDirection)

        {

smid ny NotImplementedException ();

        }

    }

Brug udskiftning af token i attributruter på controller-niveau

Attributrute i ASP.NET Core MVC yder understøttelse af en anden interessant funktion ved navn token-erstatning. Du kan bruge tokens [action], [area] og [controller] i din controller, og disse tokens erstattes med henholdsvis handlings-, areal- og controllernavne. Følgende kodestykke illustrerer, hvordan dette kan opnås.

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

offentlig klasse HomeController: Controller

{

privat readonly ILogger _logger;

offentlig HomeController (ILogger logger)

   {

_logger = logger;

   }

offentligt IActionResult-indeks ()

   {

returner Visning ();

   }

// Andre handlingsmetoder

}

Attributrute i ASP.NET Core giver dig mere kontrol og fleksibilitet over URI'erne i din webapplikation. Selvom konventionbaseret routing kan konfigureres på et enkelt sted, som igen kan anvendes på alle controllere i din applikation, er det vanskeligt at understøtte visse URI-mønstre (såsom API-versionering) med konventionbaseret routing.

Ved at bruge attributrute kan du afkoble controller- og handlingsnavne fra ruteskabelonen. Du kan endda bruge en kombination af konventionbaseret routing og attributbaseret routing i dine ASP.NET Core-applikationer.

Sådan gør du mere i ASP.NET Core:

  • Sådan overføres parametre til handlingsmetoder i ASP.NET Core MVC
  • Sådan bruges API-analysatorer i ASP.NET Core
  • Sådan bruges rutedata tokens i ASP.NET Core
  • Sådan bruges API-versionering i ASP.NET Core
  • Sådan bruges dataoverførselsobjekter i ASP.NET Core 3.1
  • Sådan håndteres 404 fejl i ASP.NET Core MVC
  • Sådan bruges afhængighedsindsprøjtning i handlingsfiltre i ASP.NET Core 3.1
  • Sådan bruges indstillingsmønsteret i ASP.NET Core
  • Sådan bruges slutpunktsrute i ASP.NET Core 3.0 MVC
  • Sådan eksporteres data til Excel i ASP.NET Core 3.0
  • Sådan bruges LoggerMessage i ASP.NET Core 3.0
  • Sådan sendes e-mails i ASP.NET Core
  • Sådan logges data til SQL Server i ASP.NET Core
  • Sådan planlægger du job med Quartz.NET i ASP.NET Core
  • Sådan returneres data fra ASP.NET Core Web API
  • Sådan formateres svardata i ASP.NET Core
  • Sådan forbruges en ASP.NET Core Web API ved hjælp af RestSharp
  • Sådan udføres asynkroniseringshandlinger ved hjælp af Dapper
  • Sådan bruges funktionsflag i ASP.NET Core
  • Sådan bruges attributten FromServices i ASP.NET Core
  • Sådan arbejder du med cookies i ASP.NET Core
  • Sådan arbejder du med statiske filer i ASP.NET Core
  • Sådan bruges URL-omskrivning af Middleware i ASP.NET Core
  • Sådan implementeres hastighedsbegrænsning i ASP.NET Core
  • Sådan bruges Azure Application Insights i ASP.NET Core
  • Brug af avancerede NLog-funktioner i ASP.NET Core
  • Sådan håndteres fejl i ASP.NET Web API
  • Sådan implementeres global undtagelseshåndtering i ASP.NET Core MVC
  • Sådan håndteres nulværdier i ASP.NET Core MVC
  • Avanceret versionering i ASP.NET Core Web API
  • Sådan arbejder du med arbejdertjenester i ASP.NET Core
  • Sådan bruges Data Protection API i ASP.NET Core
  • Sådan bruges betinget middleware i ASP.NET Core
  • Sådan arbejder du med sessionstilstand i ASP.NET Core
  • Sådan skriver du effektive controllere i ASP.NET Core