Î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ă. |