Programmering

Utforsker ruting i Web API

ASP.Net Web API er et lett rammeverk som brukes til å bygge statsløse HTTP-tjenester. Du kan bruke Web API til å designe og implementere RESTful-tjenester som kjører på HTTP. REST er en arkitektonisk stil - et sett med begrensninger som brukes til å implementere statsløse tjenester. Web API har allerede blitt den valgte teknologien for å bygge lette HTTP-tjenester. I dette innlegget vil jeg presentere en diskusjon om hvordan ruting fungerer i Web API.

Når du oppretter et Web API-prosjekt i Visual Studio, vil du se at det også opprettes et MVC-prosjekt. I likhet med ASP.Net MVC påkalles rutekonfigurasjonen i et Web API-prosjekt fra filen Global.asax. Et Web API-prosjekt lagrer konfigurasjonsinformasjonen i RouteConfig- og WebApiConfig-klassene - begge er til stede i Application_Start-mappen. I likhet med et MVC-prosjekt vil du observere en RouteConfig.cs-fil opprettet i App_Start-mappen i løsningen.

En kontroller i Web API er ansvarlig for å håndtere HTTP-forespørsler. De offentlige metodene til kontrolleren er kjent som handlingsmetoder. Så snart en forespørsel er mottatt, dirigerer Web API-kjøretiden forespørselen til riktig handling for å håndtere forespørselen. Nå, for å bestemme hvilken handling som skal påberopes, utnytter Web API-kjøretiden en rutetabell. I motsetning til et typisk ASP.Net MVC-program, kjører Web API-kjøretiden innkommende forespørsler til riktig kontroller ved å matche HTTP-verbet til forespørselen til riktig handlingsmetode.

Med ASP.Net 5 (som vil bli utgitt snart som en del av Visual Studio 2015), er det et enhetlig kjerne-rammeverk - du har et enkelt rammeverk, et bindende rammeverk for en modell og en filterrørledning. Du har nå en enhetlig kjerne for ASP.Net MVC, ASP.Net Web API og ASP.Net websider. Så det er nå bare en type kontroller for å håndtere forespørsler: det er vanlig for applikasjonene ASP.Net MVC, ASP.Net Web API og ASP.Net.

Standard MVC-rutemal ser slik ut:

{controller} / {action} / {id}

I kontrast ser standard Web API-rute slik ut:

api / {controller} / {id}

Standardruten som opprettes når du oppretter et nytt Web API-prosjekt i Visual Studio, ser slik ut:

offentlig statisk klasse WebApiConfig

{

public static void Register (HttpConfiguration config)

{

config.Routes.MapHttpRoute (

navn: "DefaultApi",

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

standardinnstillinger: ny {id = RouteParameter.Optional}

);

}

}

Legg merke til hvordan standardruten er prefikset med "api". Det er en god praksis å definere rutene til Web API-applikasjonen din ved å prefiksere dem med "api" for å gjøre dem forskjellige fra standard MVC-ruten. Når du ser på standardruten for et Web API-prosjekt, vil du ikke se ruteparameteren "{action}" - Web API-kjøretiden tilordner forespørsler til de aktuelle handlingene basert på HTTP-verbet til forespørsler.

Du kan imidlertid endre rutedefinisjonen for Web API slik at den inkluderer en "{action}" - parameter. Følgende kodebit illustrerer hvordan den modifiserte WebApiConfig-klassen ser ut.

offentlig statisk klasse WebApiConfig

{

public static void Register (HttpConfiguration config)

{

config.Routes.MapHttpRoute (

navn: "DefaultApi",

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

standardinnstillinger: ny {id = RouteParameter.Optional}

);

}

}

Nå som du har spesifisert "{action}" som en del av ruten, må du spesifisere handlingen når du påkaller WebAPI-metoden. Tenk på følgende URL: // idgservice / author / 1

I denne URL-en er idgservice navnet på domenet der WebAPI er vert, forfattere er navnet på kontrolleren og 1 sendes som en parameter. Dette fungerer imidlertid ikke hvis du har definert "{action}" i rutedefinisjonen din. Du må eksplisitt nevne handlingsnavnet når du kaller WebAPI din i denne saken. Her er den riktige URL-en som inkluderer handlingsnavnet som en del av URL: // idgservice / forfattere / GetAuthorDetails /

Merk at handlingsnavnet i URL-en ovenfor er GetAuthorDetails og har blitt nevnt som en del av den endrede URL-en.

Du kan også spesifisere HTTP-metoden for en handling ved hjelp av attributtet HttpGet, HttpPut, HttpPost eller HttpDelete. Kodebiten gitt nedenfor illustrerer hvordan dette kan oppnås:

offentlig klasse AuthorsController: ApiController

{

[HttpGet]

offentlig forfatter GetAuthor (id) {}

}

Hvis du vil tillate flere HTTP-metoder for en handling, kan du dra nytte av AcceptVerbs-attributtet som vist nedenfor:

offentlig klasse ProductsController: ApiController

{

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

offentlig forfatter GetAuthor (id) {}

}

Du kan også overstyre handlingen ved hjelp av ActionName-attributtet som vist i kodebiten gitt nedenfor:

offentlig klasse AuthorsController: ApiController

{

[HttpGet]

[ActionName ("AuthorDetails")]

offentlig forfatter GetAuthor (id) {}

}

Merk at du også kan forhindre at en metode blir påkalt som en handling ved å utnytte NonAction-attributtet som vist nedenfor.

offentlig klasse AuthorsController: ApiController

{

[HttpGet]

[NonAction]

public Boolean ValidateLogin (id) {}

}

Copyright no.verticalshadows.com 2024

$config[zx-auto] not found$config[zx-overlay] not found