Programovanie

Pochopte väzbu parametrov v webovom rozhraní API ASP.Net

ASP.Net Web API je ľahký rámec, ktorý je možné použiť na vytváranie služieb RESTful HTTP. Pri práci s metódami radiča vo webovom rozhraní API budete často musieť odovzdať parametre týmto metódam. „Parameter“ tu jednoducho odkazuje na argument pre metódu, zatiaľ čo „parametrická väzba“ sa týka procesu nastavenia hodnôt parametrov metód webového API.

Upozorňujeme, že existujú dva spôsoby, ako môže webové rozhranie API viazať parametre: väzba modelu a formátory. Väzba modelu sa používa na čítanie z reťazca dotazu, zatiaľ čo formátovacie nástroje sa používajú na čítanie z tela žiadosti. Môžete tiež použiť prevádzače typov na povolenie webového API, aby s triedou zaobchádzalo ako s jednoduchým typom a potom viazalo parameter z URI. Aby ste to dosiahli, budete si musieť vytvoriť vlastný TypeConverter. Môžete tiež vytvoriť vlastný viazač modelov implementáciou rozhrania IModelBinder vo svojej triede a následnou implementáciou metódy BindModel. Ďalšie informácie o prevádzačoch typov a viazačoch modelov nájdete v tejto dokumentácii spoločnosti Microsoft.

Teraz, aby bolo možné viazať parametre, sa webové rozhranie API riadi týmto pravidlom: Pre jednoduché typy sa webové rozhranie API pokúša získať hodnotu z identifikátora URI a pre zložité typy sa webové rozhranie API pokúša získať hodnotu z tela žiadosti. Jednoduché typy tu odkazujú na primitívne typy .Net - int, bool, double, float atď. - a na ďalšie typy, ktoré zahŕňajú TimeSpan, DateTime, Guid, desatinné číslo a reťazec. Zahŕňa tiež akýkoľvek typ, pre ktorý je k dispozícii prevodník typov, ktorý dokáže prevádzať z reťazca. V nasledujúcej časti preskúmame atribúty [FromBody] a [FromUri] používané na viazanie hodnôt z tela žiadosti a URI.

Kedy použiť [FromBody] a [FromUri] vo webovom API

Ak používate webové rozhranie API už nejaký čas, možno vám budú známe atribúty [FromBody] a [FromUri]. Atribút [FromUri] má predponu pred parameter, aby určil, že hodnota sa má načítať z URI požiadavky, a atribút [FromBody] sa používa na určenie, že hodnota sa má načítať z tela požiadavky.

Pre všetky primitívne typy (int, double, float atď.) Sa behové prostredie Web API pokúsi načítať hodnotu z URI požiadavky HTTP. Pre zložité typy (inštancie tried) sa behové prostredie Web API pokúsi načítať hodnotu z tela požiadavky HTTP pomocou formátovacieho nástroja typu média. Toto je predvolené správanie webového rozhrania API.

Ak teda máte v identifikátore URI požiadavky primitívny typ, nemusíte uvádzať atribút [FromUri]. Podobne, ak máte v tele žiadosti komplexný typ, nemusíte zadávať atribút [FromBody]. Ak sa však primitívny typ nachádza v tele požiadavky alebo zložitý typ v URI požiadavky, musíte určiť atribút [FromBody] alebo [FromUri]. Dôvod je ten, že sa v obidvoch prípadoch vyhýbate predvolenému správaniu.

Ako používať [FromBody] a [FromUri] vo webovom API

Nasledujúci úryvok kódu ilustruje, ako môžete určiť atribút [FromBody] pre základný dátový typ odovzdaný ako parameter metóde webového API.

verejná trieda SecurityController: ApiController

{

verejný príspevok HttpResponseMessage ([FromBody] int id)

    {

// Sem napíš svoj kód

    }

}

A tu je útržok kódu, ktorý ilustruje, ako môžete odovzdať komplexný typ ako parameter metóde webového API pomocou atribútu FromUri.

verejná trieda SecurityController: ApiController

{

verejný príspevok HttpResponseMessage (používateľ [[FromUri])

    {

// Sem napíš svoj kód

    }

}

Je potrebné poznamenať, že odosielanie overovacích údajov používateľa, ako je používateľské meno a heslo, prostredníctvom identifikátora URI nie je dobrým postupom, aj keď možno používate protokol SSL. Je to tak preto, lebo takéto údaje sa môžu ukladať do protokolov prehliadača, kde sú citlivé na vystavenie. Pri zasielaní akýchkoľvek citlivých údajov (používateľské mená, heslá, informácie o kreditných kartách atď.) Prostredníctvom tela žiadosti je v každom prípade nevyhnutné použiť [FromBody].

Upozorňujeme, že keď použijete atribút [FromBody] pri odovzdávaní parametra metóde webového rozhrania API, runtime webového rozhrania API využije hlavičku typu obsahu na výber správneho formátovača. Viac o vyjednávaní obsahu vo webovom API sa dozviete z môjho článku tu.

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