Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 27609|Răspunde: 3

[WebAPI] WebAPI nu poate lega mai mulți parametri (SB și SB1) la conținutul cererii

[Copiază linkul]
Postat pe 16.08.2016 13:52:38 | | | |



În WebAPI, corpul cererii (HttpContent) poate fi citit o singură dată, nu poate fi stocat în cache și poate fi citit doar înainte.

De exemplu:

1. Adresa cererii: /?id=123&name=bob

    Metoda server: void Action(int id, string name) // Toți parametrii sunt tipuri simple, deci toți vor proveni din url

2. Adresa cererii: /?id=123&name=bob

    Metoda server: void Action([FromUri] int id, [FromUri] numele șirului) // La fel ca mai sus

                      void Acțiune ([FromBody] numele stringului); Atributul [FormBody] afișează că întregul corp este citit ca un șir ca un argument

3. Adresă de solicitare: /?id=123

    Definiția clasei:

clasa publică Customer { // Un tip complex de obiect definit
  șirul public Nume { get; set; }
  public int Age { get; set; }
}

    Metodă server: void Action(int id, Customer c) // Id-ul parametrului este citit din șirul de interogare, parametrul c este o clasă complexă de obiecte Client, citită din corp prin formator

    Metoda pe partea de server: acțiune de anulare (Client c1, Client c2) // Eroare! Mai mulți parametri sunt tipuri complexe și toți încearcă să citească dintr-un corp, care poate fi citit o singură dată

    Metoda server-side: acțiune void ([FromUri] Client c1, Client c2) // Da! Spre deosebire de acțiunea de mai sus, tipul complex C1 va fi citit din URL, iar C2 va fi citit din corp

4. Metoda ModelBinder:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indică faptul că un anumit model binder este folosit pentru a rezolva parametrul

[ModelBinder(MyCustomBinder)] clasa publică SomeType { } // Aplică această regulă tuturor parametrilor SomeType declarând atributul [ModelBidner(MyCustomBinder)] unui tip specific SomeType

void Acțiune(SomeType c) // Deoarece tipul c este SomeType, caracteristicile de pe SomeType sunt aplicate pentru a determina legarea modelului



Rezumat:

1. Parametrii simpli impliciti trec prin parametrii URL, cu excepții:

1.1 Dacă ruta conține parametrul id, parametrul id este trecut prin rută;

1.2 Dacă parametrul este marcat ca [FromBody], parametrul poate fi un parametru simplu, iar clientul îl poate transmite prin POST: $.ajax(url, '=value'), sau $.ajax({url: url, data: {'': 'value'}});

2. Parametrii complecși impliciti (clase de entități personalizate) sunt transmise prin POST, cu excepții:

2.1 Dacă valoarea parametrului este marcată ca [FromUri], parametrul poate fi un parametru complex;

3. Un parametru marcat [FromBody] poate apărea o singură dată, un parametru marcat ca [FromUri] poate apărea de mai multe ori, iar dacă parametrul marcat ca [FromUri] este un parametru simplu, eticheta poate fi eliminată.




Precedent:.NET Oracle metodă multi-table interogare, o metodă stupidă.
Următor:C# folosește reflexia pentru a determina dacă o proprietate este atribuită
Postat pe 16.08.2016 15:21:29 |
ModelBinder ar trebui să aibă o clasă de caracteristici pentru ModelBinderAttribute

Similar cu filtrele
Postat pe 16.08.2016 15:21:44 |
Vino să ne vizităm în fiecare zi
Postat pe 16.08.2016 15:22:00 |
Dă-mi puțin prestigiu
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com