Programmering

Udforskning af routing i Web API

ASP.Net Web API er en let ramme, der bruges til at opbygge statsløse HTTP-tjenester. Du kan bruge Web API til at designe og implementere RESTful-tjenester, der kører på HTTP. REST er en arkitektonisk stil - et sæt begrænsninger, der bruges til at implementere statsløse tjenester. Web API er allerede blevet den valgte teknologi til opbygning af lette HTTP-tjenester. I dette indlæg præsenterer jeg en diskussion om, hvordan routing fungerer i Web API.

Når du opretter et Web API-projekt i Visual Studio, vil du bemærke, at der også oprettes et MVC-projekt. I lighed med ASP.Net MVC påkaldes routingkonfigurationen i et Web API-projekt fra Global.asax-filen. Et Web API-projekt gemmer konfigurationsoplysningerne i klasserne RouteConfig og WebApiConfig - begge disse findes i mappen Application_Start. På samme måde som et MVC-projekt vil du observere en RouteConfig.cs-fil oprettet i App_Start-mappen i din løsning.

En controller i Web API er ansvarlig for håndtering af HTTP-anmodninger. Controllerens offentlige metoder er kendt som handlingsmetoder. Så snart en anmodning er modtaget, dirigerer Web API-runtime anmodningen til den relevante handling for at håndtere anmodningen. For at bestemme, hvilken handling der skal påberåbes, udnytter Web API-runtime nu en routingtabel. I modsætning til en typisk ASP.Net MVC-applikation dirigerer Web API-runtime de indgående anmodninger til den relevante controller ved at matche HTTP-verbet for anmodningen til den relevante handlingsmetode.

Med ASP.Net 5 (udgives snart som en del af Visual Studio 2015) er der en samlet kerneramme - du har en enkelt outing-ramme, en enkelt modelbindende ramme og en pipeline med et filter. Du har nu en samlet kerne til ASP.Net MVC, ASP.Net Web API og ASP.Net websider. Så der er nu kun en type controller til at håndtere anmodninger: det er fælles for dine ASP.Net MVC-, ASP.Net Web API- og ASP.Net-applikationer.

Standard MVC-ruteskabelonen ser sådan ud:

{controller} / {action} / {id}

I modsætning hertil ser standard-API-ruten sådan ud:

api / {controller} / {id}

Standardruten, der oprettes, når du opretter et nyt Web API-projekt i Visual Studio, ser sådan ud:

offentlig statisk klasse WebApiConfig

{

offentligt statisk ugyldigt register (HttpConfiguration config)

{

config.Routes.MapHttpRoute (

navn: "StandardApi",

routeTemplate: "api / {controller} / {id}",

standardindstillinger: ny {id = RouteParameter.Optional}

);

}

}

Bemærk, hvordan standardruten er forud for "api". Det er en god praksis at definere ruterne til din Web API-applikation ved at forudse dem med "api" for at gøre dem forskellige fra standard MVC-ruten. På en anden note, når du ser på standardruten for et Web API-projekt, vil du ikke se ruteparameteren "{action}" - Web API-runtime kortlægger anmodninger til de relevante handlinger baseret på HTTP-verbet for anmodninger.

Du kan dog ændre definitionen af ​​web-API-ruten, så den inkluderer en "{action}" -parameter. Følgende kodestykke illustrerer, hvordan den ændrede klasse WebApiConfig ser ud.

offentlig statisk klasse WebApiConfig

{

offentligt statisk ugyldigt register (HttpConfiguration config)

{

config.Routes.MapHttpRoute (

navn: "StandardApi",

routeTemplate: "api / {controller} / {action} / {id}",

standardindstillinger: ny {id = RouteParameter.Optional}

);

}

}

Nu hvor du har angivet "{action}" som en del af ruten, skal du angive handlingen, når du påberåber WebAPI-metoden. Overvej følgende URL: // idgservice / author / 1

I denne URL er idgservice navnet på det domæne, hvor WebAPI er hostet, forfattere er controllerens navn, og 1 sendes som en parameter. Dette fungerer dog ikke, hvis du har defineret "{action}" i din rutedefinition. Du bliver nødt til eksplicit at nævne handlingsnavnet, når du kalder din WebAPI denne sag. Her er den korrekte URL, der inkluderer handlingsnavnet som en del af URL: // idgservice / author / GetAuthorDetails /

Bemærk, at handlingsnavnet i ovenstående URL er GetAuthorDetails og er blevet nævnt som en del af den ændrede URL.

Du kan også angive HTTP-metoden for en handling ved hjælp af attributten HttpGet, HttpPut, HttpPost eller HttpDelete. Kodestykket nedenfor illustrerer, hvordan dette kan opnås:

offentlig klasse AuthorsController: ApiController

{

[HttpGet]

offentlig forfatter GetAuthor (id) {}

}

Hvis du vil tillade flere HTTP-metoder til en handling, kan du drage fordel af attributten AcceptVerbs som vist nedenfor:

offentlig klasse ProductsController: ApiController

{

[AcceptVerbs ("GET", "HEAD")]

offentlig forfatter GetAuthor (id) {}

}

Du kan også tilsidesætte handlingen ved hjælp af ActionName-attributten som vist i kodestykket nedenfor:

offentlig klasse AuthorsController: ApiController

{

[HttpGet]

[Handlingsnavn ("Forfatterdetaljer")]

offentlig forfatter GetAuthor (id) {}

}

Bemærk, at du også kan forhindre, at en metode påberåbes som en handling ved at udnytte NonAction-attributten som vist nedenfor.

offentlig klasse AuthorsController: ApiController

{

[HttpGet]

[NonAction]

offentlig boolsk ValidateLogin (id) {}

}

Copyright verticalshadows.com 2021