Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 27609|Odgovoriti: 3

[WebAPI] WebAPI ne more povezati več parametrov (SB in SB1) na vsebino zahteve

[Kopiraj povezavo]
Objavljeno na 16. 08. 2016 13:52:38 | | | |



V WebAPI-ju je mogoče telo zahteve (HttpContent) prebrati le enkrat, ne predpomniti in ga je mogoče prebrati le naprej.

Na primer:

1. Naslov za zahtevo: /?id=123&name=bob

    Metoda na strežniški strani: void Action(int id, ime stringa) // Vsi parametri so preproste vrste, zato bodo vsi prišli iz URL-ja

2. Naslov za zahtevo: /?id=123&name=bob

    Strežniška metoda: void Action([FromUri] int id, [FromUri] ime stringa) // Enako kot zgoraj

                      void Action([FromBody] ime niza); Atribut [FormBody] prikazuje, da se celotno telo bere kot niz kot argument

3. Naslov zahtevka: /?id=123

    Opredelitev razreda:

javni razred Customer { // Kompleksen tip objekta, definiran
  javni niz Ime { get; set; }
  public int Age { get; set; }
}

    Strežniška metoda: void Action(int id, Customer c) // Parameter id se prebere iz poizvedbenega niza, parameter c je kompleksen razred objekta stranke, ki se prebere iz telesa skozi formatter

    Metoda na strežniški strani: razveljavi dejanje (stranka c1, stranka c2) // Napaka! Več parametrov je kompleksnih tipov in vsi poskušajo brati iz telesa, ki ga je mogoče prebrati le enkrat

    Metoda na strežniški strani: akcija razveljavi ([FromUri] Customer c1, Customer c2) // Da! Za razliko od zgornje akcije se kompleksni tip C1 bere iz URL-ja, C2 pa iz telesa

4. ModelBinder metoda:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Označuje, da se za razrešitev parametra uporablja določen model binder

[ModelBinder(MyCustomBinder)] javni razred SomeType { } // To pravilo uporabite na vse parametre tipa SomeType tako, da atribut [ModelBidner(MyCustomBinder)] določite za določen tip SomeType

void Action(SomeType c) // Ker je tip c SomeType, se lastnosti na SomeType uporabijo za določitev njegove vezanosti na model



Povzetek:

1. Privzeti preprosti parametri se prenašajo prek URL parametrov, z izjemo:

1.1 Če pot vsebuje id parameter, se id parameter prenese skozi pot;

1.2 Če je parameter označen kot [FromBody], je parameter lahko preprost parameter, odjemalec pa ga lahko posreduje preko POST: $.ajax(url, '=value'), ali $.ajax({url: url, data: {'': 'value'}});

2. Privzeti kompleksni parametri (prilagojeni razredi entitet) se posredujejo preko POST, z izjemami:

2.1 Če je vrednost parametra označena kot [FromUri], je parameter lahko kompleksen parameter;

3. Parameter, označen z [FromBody], se lahko pojavi le enkrat, parameter, označen kot [FromUri], se lahko pojavi večkrat, in če je parameter, označen kot [FromUri], preprost parameter, se oznaka lahko odstrani.




Prejšnji:.NET Oracle večtabelna metoda poizvedb, neumna metoda.
Naslednji:C# uporablja refleksijo za določanje, ali je lastnost dodeljena
Objavljeno na 16. 08. 2016 15:21:29 |
ModelBinder bi moral imeti razred značilnosti za ModelBinderAttribute

Podobno kot filtri
Objavljeno na 16. 08. 2016 15:21:44 |
Pridi na obisk vsak dan
Objavljeno na 16. 08. 2016 15:22:00 |
Daj mi malo prestiža
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com