Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 27609|Odpoveď: 3

[WebAPI] WebAPI nemôže naviazať viacero parametrov (SB a SB1) na obsah požiadavky

[Kopírovať odkaz]
Zverejnené 16. 8. 2016 13:52:38 | | | |



V WebAPI je telo požiadavky (HttpContent) možné čítať iba raz, nie je uložené do vyrovnávacej pamäte a môže byť čítané len dopredu.

Napríklad:

1. Adresa požiadavky: /?id=123&name=bob

    Serverová metóda: void Action(int id, názov reťazca) // Všetky parametre sú jednoduché typy, takže všetky budú pochádzať z URL

2. Adresa požiadavky: /?id=123&name=bob

    Metóda na strane servera: void Action([FromUri] int id, [FromUri] názov reťazca) // Rovnaké ako vyššie

                      void Action([FromBody] názov reťazca); Atribút [FormBody] ukazuje, že celé telo sa číta ako reťazec ako argument

3. Adresa požiadavky: /?id=123

    Definícia triedy:

public class Customer { // Komplexný typ objektu definovaný
  public string Name { get; set; }
  public int Age { get; set; }
}

    Metóda na strane servera: void Action(int id, Customer c) // Parameter id sa číta z dotazovacieho reťazca, parameter c je zložitá trieda objektu zákazníka, čítaná z tela cez formátovač

    Metóda na strane servera: zrušiť akciu (Zákazník c1, Zákazník c2) // Chyba! Viaceré parametre sú zložité typy a všetky sa snažia čítať z tela, ktoré je možné prečítať len raz

    Metóda na strane servera: void action([FromUri] Customer c1, Customer c2) // Áno! Na rozdiel od vyššie uvedenej akcie sa komplexný typ C1 číta z URL a C2 z tela

4. Metóda ModelBinder:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Označuje, že na vyriešenie parametra sa používa špecifický modelový binder

[ModelBinder(MyCustomBinder)] verejná trieda SomeType { } // Aplikujte toto pravidlo na všetky parametre typu SomeType deklarovaním atribútu [ModelBidner(MyCustomBinder)] pre konkrétny typ SomeType

void Action(SomeType c) // Keďže typ c je SomeType, charakteristiky na SomeType sa aplikujú na určenie jeho viazania na model



Súhrn:

1. Predvolené jednoduché parametre sa prenášajú cez URL parametre, s výnimkami:

1.1 Ak trasa obsahuje id parameter, id parameter prechádza cez trasu;

1.2 Ak je parameter označený ako [FromBody], parameter môže byť jednoduchý parameter a klient ho môže poslať cez POST: $.ajax(url, '=value'), alebo $.ajax({url: url, data: {'': 'value'}});

2. Predvolené komplexné parametre (vlastné triedy entít) sa prenášajú cez POST, s výnimkami:

2.1 Ak je hodnota parametra označená ako [FromUri], parameter môže byť komplexný parameter;

3. Parameter označený [FromBody] sa môže zobraziť iba raz, parameter označený ako [FromUri] sa môže objaviť viackrát, a ak je parameter označený ako [FromUri] jednoduchý parameter, značka môže byť odstránená.




Predchádzajúci:.NET Oracle multi-tabuľková metóda dotazovania, hlúpa metóda.
Budúci:C# používa reflexiu na určenie, či je vlastnosť priradená
Zverejnené 16. 8. 2016 15:21:29 |
ModelBinder by mal mať triedu vlastností pre ModelBinderAttribute

Podobné ako filtre
Zverejnené 16. 8. 2016 15:21:44 |
Príďte každý deň na návštevu
Zverejnené 16. 8. 2016 15:22:00 |
Daj mi trochu prestíže
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com