|
|
Zveřejněno 16.08.2016 13:52:38
|
|
|
|

Ve WebAPI lze tělo požadavku (HttpContent) přečíst pouze jednou, nelze ukládat do mezipaměti a lze jej pouze číst dopředu.
Například:
1. Adresa požadavku: /?id=123&name=bob
Metoda na straně serveru: void Action(int id, název řetězce) // Všechny parametry jsou jednoduché typy, takže všechny pocházejí z URL
2. Adresa požadavku: /?id=123&name=bob
Metoda na straně serveru: void Action([FromUri] int id, [FromUri] název řetězce) // Stejné jako výše
void Action([FromBody] název řetězce); Atribut [FormBody] ukazuje, že celé tělo je čteno jako řetězec jako argument
3. Adresa požadavku: /?id=123
Definice třídy:
public class Customer { // Komplexní typ objektu definovaný public string Jméno { get; set; } public int Age { get; set; }
}
Metoda na straně serveru: void Action(int id, Customer c) // Id parametru se čte z dotazovacího řetězce, parametr c je složitá třída objektu zákazníka, čtená z těla přes formátovač
Metoda na straně serveru: akci zrušení(Zákazník c1, Zákazník c2) // Chyba! Více parametrů jsou složité typy a všechny se snaží číst z tělesa, které lze přečíst pouze jednou
Metoda na straně serveru: akcie vyprázdnění([FromUri] Customer c1, Customer c2) // Ano! Na rozdíl od výše uvedené akce bude komplexní typ C1 načten z URL a C2 z těla
4. Metoda ModelBinder:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // Označuje, že k vyřešení parametru je použit specifický modelový binder
[ModelBinder(MyCustomBinder)] veřejná třída SomeType { } // Aplikujte toto pravidlo na všechny parametry typu SomeType deklarováním atributu [ModelBidner(MyCustomBinder)] ke specifickému typu SomeType
void Action(SomeType c) // Protože typ c je SomeType, jsou na SomeType aplikovány charakteristiky k určení jeho modelové vazby
Shrnutí:
1. Výchozí jednoduché parametry jsou předávány přes URL parametry, s výjimkami:
1.1 Pokud trasa obsahuje id parametr, id parametr je předán trasou;
1.2 Pokud je parametr označen jako [FromBody], může být parametr jednoduchý a klient jej může předat přes POST: $.ajax(url, '=value'), nebo $.ajax({url: url, data: {'': 'value'}});
2. Výchozí komplexní parametry (vlastní třídy entit) jsou předávány přes POST, s výjimkami:
2.1 Pokud je hodnota parametru označena jako [FromUri], může být parametr komplexní parametr;
3. Parametr označený [FromBody] se může objevit pouze jednou, parametr označený jako [FromUri] se může objevit vícekrát, a pokud je parametr označený jako [FromUri] jednoduchý parametr, lze značku odstranit. |
Předchozí:.NET Oracle multi-table dotazovací metoda, hloupá metoda.Další:C# používá reflexi k určení, zda je vlastnost přiřazena
|