Programmēšana

Izprotiet parametru saistīšanu ASP.Net Web API

ASP.Net Web API ir viegls ietvars, ko var izmantot RESTful HTTP pakalpojumu izveidei. Strādājot ar kontrollera metodēm Web API, jums bieži būs jānodod parametri šīm metodēm. “Parametrs” šeit vienkārši attiecas uz argumentu uz metodi, savukārt “parametru saistīšana” attiecas uz procesu, kā vērtības iestatīt Web API metožu parametriem.

Ņemiet vērā, ka ir divi veidi, kā Web API var saistīt parametrus: modeļa saistīšana un formatētāji. Modeļa iesiešana tiek izmantota, lai nolasītu no vaicājuma virknes, savukārt formatētāji tiek izmantoti, lai lasītu no pieprasījuma pamatteksta. Varat arī izmantot tipa pārveidotājus, lai ļautu Web API apstrādāt klasi kā vienkāršu veidu un pēc tam saistīt parametru no URI. Lai to izdarītu, jums būs jāizveido pielāgots TypeConverter. Varat arī izveidot pielāgotu saistvielu modeli, savā klasē ieviešot IModelBinder saskarni un pēc tam ieviešot BindModel metodi. Lai uzzinātu vairāk par tipa pārveidotājiem un modeļu saistvielām, apskatiet šo Microsoft dokumentāciju.

Tagad, lai saistītu parametrus, Web API ievēro šo noteikumu: Vienkāršiem tipiem Web API mēģina iegūt vērtību no URI, bet sarežģītiem veidiem - Web API mēģina iegūt vērtību no pieprasījuma pamatteksta. Vienkāršie veidi šeit attiecas gan uz .Net primitīvajiem tipiem - int, bool, double, float un tā tālāk -, gan uz citiem veidiem, kas ietver TimeSpan, DateTime, Guid, decimāldaļu un virkni. Tas ietver arī jebkuru veidu, kuram ir pieejams tipa pārveidotājs, kuru var pārveidot no virknes. Nākamajā sadaļā mēs izpētīsim atribūtus [FromBody] un [FromUri], kas tiek izmantoti, lai attiecīgi piesaistītu pieprasījuma pamatteksta un URI vērtības.

Kad Web API ir jāizmanto [FromBody] un [FromUri]

Ja kādu laiku izmantojat Web API, iespējams, esat pazīstams ar atribūtiem [FromBody] un [FromUri]. Atribūts [FromUri] tiek pievienots parametram ar prefiksu, lai norādītu, ka vērtība jālasa no pieprasījuma URI, un atribūtu [FromBody] izmanto, lai norādītu, ka vērtība jālasa no pieprasījuma pamatteksta.

Visiem primitīvajiem veidiem (int, double, float utt.) Web API izpildlaiks mēģina nolasīt vērtību no HTTP pieprasījuma URI. Sarežģītiem tipiem (klašu gadījumiem) Web API izpildlaiks mēģina nolasīt vērtību no HTTP pieprasījuma pamatteksta, izmantojot multivides tipa formatētāju. Tā ir Web API noklusējuma darbība.

Tādējādi, ja pieprasījuma URI ir primitīva vērtība, jums nav jānorāda atribūts [FromUri]. Līdzīgi, ja pieprasījuma pamattekstā ir sarežģīta veida vērtība, jums nav jānorāda atribūts [FromBody]. Tomēr, ja primitīvais tips atrodas pieprasījuma pamattekstā vai kompleksais tips atrodas pieprasījuma URI, jums jānorāda atribūts [FromBody] vai [FromUri]. Iemesls ir tāds, ka abos gadījumos jūs nomaldāties no noklusējuma.

Kā Web API izmantot [FromBody] un [FromUri]

Šis koda fragments parāda, kā jūs varat norādīt atribūtu [FromBody] pamata datu tipam, kas Web API metodei nosūtīts kā parametrs.

publiskā klase SecurityController: ApiController

{

public HttpResponseMessage Post ([FromBody] int id)

    {

// Uzrakstiet savu kodu šeit

    }

}

Un šeit ir koda fragments, kas ilustrē to, kā jūs varat nodot sarežģītu tipu kā parametru Web API metodei, izmantojot FromUri atribūtu.

publiskā klase SecurityController: ApiController

{

public HttpResponseMessage Post ([FromUri] lietotāja lietotājs)

    {

// Uzrakstiet savu kodu šeit

    }

}

Jāatzīmē, ka lietotāju autentifikācijas datu, piemēram, lietotājvārda un paroles sūtīšana, izmantojot URI, nav laba prakse, pat ja jūs, iespējams, izmantojat SSL. Tas ir tāpēc, ka šādi dati var tikt saglabāti pārlūkprogrammas žurnālos, kur tie ir neaizsargāti pret iedarbību. Pārsūtot visus sensitīvos datus (lietotājvārdus, paroles, kredītkaršu informāciju utt.), Izmantojot pieprasījuma struktūru, visos gadījumos obligāti jāizmanto [FromBody].

Ņemiet vērā, ka, lietojot atribūtu [FromBody], pārsūtot parametru Web API metodei, Web API izpildlaiks izmanto satura tipa galvenes priekšrocības, lai izvēlētos pareizo formatējumu. Vairāk par satura sarunām Web API varat uzzināt no mana raksta šeit.

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