Programování

Vysvětlení vazby parametrů v ASP.Net Web API

ASP.Net Web API je odlehčený rámec, který lze použít k vytváření služeb RESTful HTTP. Při práci s metodami kontroleru ve webovém rozhraní API budete často muset předat parametry těmto metodám. „Parametr“ zde jednoduše odkazuje na argument k metodě, zatímco „parametrová vazba“ odkazuje na proces nastavování hodnot k parametrům metod webového rozhraní API.

Všimněte si, že existují dva způsoby, jak může webové rozhraní API vázat parametry: vazba modelu a formátory. Vazba modelu se používá ke čtení z řetězce dotazu, zatímco formátovací moduly se používají ke čtení z těla požadavku. Můžete také použít převaděče typů k povolení webového rozhraní API považovat třídu za jednoduchý typ a poté svázat parametr z identifikátoru URI. Chcete-li to provést, budete muset vytvořit vlastní TypeConverter. Můžete také vytvořit vlastní pořadač modelu implementací rozhraní IModelBinder ve vaší třídě a následnou implementací metody BindModel. Další informace o převaděčích typů a vazačích modelů najdete v této dokumentaci Microsoftu.

Nyní, aby bylo možné svázat parametry, se webové rozhraní API řídí tímto pravidlem: Pro jednoduché typy se webové rozhraní API pokusí získat hodnotu z identifikátoru URI a pro složité typy se webové rozhraní API pokusí získat hodnotu z těla požadavku. Jednoduché typy zde odkazují na primitivní typy .Net - int, bool, double, float atd. - a na další typy, které zahrnují TimeSpan, DateTime, Guid, decimal a string. Zahrnuje také jakýkoli typ, pro který je k dispozici převodník typů, který lze převést z řetězce. V další části prozkoumáme atributy [FromBody] a [FromUri] použité k navázání hodnot z těla požadavku a URI.

Kdy použít [FromBody] a [FromUri] ve webovém rozhraní API

Pokud používáte webové rozhraní API již nějakou dobu, můžete být obeznámeni s atributy [FromBody] a [FromUri]. Atribut [FromUri] má předponu k parametru, aby určil, že hodnota by měla být čtena z URI požadavku, a atribut [FromBody] slouží k určení, že hodnota má být načtena z těla požadavku.

U všech primitivních typů (int, double, float atd.) Se modul runtime webového rozhraní API pokusí načíst hodnotu z identifikátoru URI požadavku HTTP. Pro složité typy (instance tříd) se modul runtime webového rozhraní API pokusí načíst hodnotu z těla požadavku HTTP pomocí formátovacího nástroje typu média. Toto je výchozí chování webového rozhraní API.

Pokud tedy máte v identifikátoru URI požadavku primitivní typ, nemusíte specifikovat atribut [FromUri]. Podobně, pokud máte v těle požadavku hodnotu, která je složitého typu, nemusíte specifikovat atribut [FromBody]. Pokud se však primitivní typ nachází v těle požadavku nebo složitý typ je umístěn v identifikátoru URI požadavku, musíte zadat atribut [FromBody] nebo [FromUri]. Důvodem je, že se v obou případech odchýlíte od výchozího chování.

Jak používat [FromBody] a [FromUri] ve webovém rozhraní API

Následující fragment kódu ukazuje, jak můžete určit atribut [FromBody] pro základní datový typ předaný jako parametr metodě webového API.

veřejná třída SecurityController: ApiController

{

veřejný příspěvek HttpResponseMessage ([FromBody] int id)

    {

// Sem napište kód

    }

}

A tady je fragment kódu, který ilustruje, jak můžete předat složitý typ jako parametr metodě webového API pomocí atributu FromUri.

veřejná třída SecurityController: ApiController

{

veřejný příspěvek HttpResponseMessage (uživatel [[FromUri])

    {

// Sem napište kód

    }

}

Je třeba poznamenat, že odesílání údajů o ověření uživatele, jako je uživatelské jméno a heslo, prostřednictvím URI není dobrým postupem, i když možná používáte SSL. Je to proto, že taková data mohou být uložena do protokolů prohlížeče, kde jsou vystavena riziku. Při předávání jakýchkoli citlivých údajů (uživatelská jména, hesla, informace o kreditní kartě atd.) Prostřednictvím těla žádosti je bezpodmínečně nutné použít [FromBody].

Všimněte si, že když použijete atribut [FromBody] při předávání parametru metodě webového rozhraní API, modul runtime webového rozhraní API využívá záhlaví typu obsahu k výběru správného formátovače. Více o vyjednávání obsahu ve webovém rozhraní API se můžete dozvědět z mého článku zde.

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