A WebAPI-ban a kéréstest (HttpContent) csak egyszer olvasható, nem gyorsalogázható, és csak előre lehet olvasni.
Például:
1. Kérés címe: /?id=123&name=bob
Szerveroldali metódus: void Action(int id, string name) // Minden paraméter egyszerű típus, tehát mind az URL-ből származik
2. Kérési cím: /?id=123&name=bob
Szerveroldali metódus: void Action([FromUri] int id, [FromUri] string name) // Ugyanaz, mint fent
void Action([FromBody] string name); A [FormBody] attribútum azt mutatja, hogy az egész test egy stringként érvelve olvasható
3. Kérés címe: /?id=123
Osztálymeghatározás:
public class Customer { // Egy komplex objektumtípus definiált public string Name { get; Szett; } public int Age { get; Szett; }
}
Szerveroldali módszer: void Action(int id, Customer c) // Paraméterazonosító a lekérdezési stringből olvasható, a c paraméter egy összetett ügyfélobjektum osztály, amelyet a testből a formátoron keresztül olvasnak
Szerveroldali módszer: void action (Ügyfél c1, Ügyfél c2) // Hiba! Több paraméter összetett típus, és mindegyik megpróbál egy testből olvasni, amelyet csak egyszer lehet olvasni
Szerveroldali módszer: void action([FromUri] Customer c1, Customer c2) // Yes! Ellentétben a fenti művelettel, a komplex C1 típust az URL-ről, a C2-t pedig a testből olvassák el
4. ModelBinder módszer:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // Jelzi, hogy egy adott modell bindert használnak a paraméter feloldásához
[ModelBinder(MyCustomBinder)] public class SomeType { } // Ezt a szabályt minden SomeType típusparaméterre alkalmazzuk úgy, hogy a [ModelBidner(MyCustomBinder)] attribútumot egy adott típusú SomeType névre jelöljük
void Akció(SomeType c) // Mivel c típusa SomeType, a SomeType jellemzőit alkalmazzák a modellkötés meghatározására
Összefoglalás:
1. Az alapértelmezett egyszerű paramétereket URL paramétereken keresztül továbbítják, kivételekkel:
1.1 Ha az útvonal tartalmazza az id paramétert, az id paramétert áthaladják az útvonalon;
1.2 Ha a paraméter [FromBody] jelöléssel van jelölve, a paraméter lehet egyszerű paraméter, és az ügyfél továbbíthatja a POST-on keresztül: $.ajax(url, '=value'), vagy $.ajax({url: url, data: {'': 'value'}});
2. Az alapértelmezett összetett paramétereket (egyedi entitásosztályokat) POST-on keresztül továbbítják, kivételekkel:
2.1 Ha a paraméter értéke [FromUri] néven van jelölve, akkor a paraméter lehet komplex paraméter;
3. Egy [FromBody] jelölésű paraméter csak egyszer jelenthet meg, egy [FromUri] jelölésű paraméter többször is megjelenhet, és ha a [FromUri] paraméter egyszerű paraméter, akkor a címke eltávolítható. |