Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 27609|Odpověď: 3

[WebAPI] WebAPI nemůže navázat více parametrů (SB a SB1) na obsah požadavku

[Kopírovat odkaz]
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
Zveřejněno 16.08.2016 15:21:29 |
ModelBinder by měl mít třídu rysů pro ModelBinderAttribute

Podobně jako filtry
Zveřejněno 16.08.2016 15:21:44 |
Přijďte každý den na návštěvu
Zveřejněno 16.08.2016 15:22:00 |
Dej mi trochu prestiže
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com