I WebAPI kan förfrågningskroppen (HttpContent) bara läsas en gång, inte cachas och endast läsas vidare.
Till exempel:
1. Begäran: /?id=123&name=bob
Server-side method: void Action(int id, strängnamn) // Alla parametrar är enkla typer, så de kommer alla från url:en
2. Förfrågan: /?id=123&name=bob
Servermetod: void Action([FromUri] int id, [FromUri] strängnamn) // Samma som ovan
void Action ([FromBody] strängnamn); Attributet [FormBody] visar att hela kroppen läses som en sträng som ett argument
3. Begäran: /?id=123
Klassdefinition:
publik klass Customer { // En komplex objekttyp definierad publik strängnamn { get; set; } public int Age { get; set; }
}
Server-side metod: void Action(int id, Customer c) // Parameter id läses från frågesträngen, parameter c är en komplex Customer object-klass, läst från body via formatter
Server-side method: void action(Customer c1, Customer c2) // Fel! Flera parametrar är komplexa typer och alla försöker läsa från en kropp, som bara kan läsas en gång
Server-side method: void action([FromUri] Customer c1, Customer c2) // Ja! Till skillnad från åtgärden ovan läses komplex typ C1 från URL:en och C2 från brödtexten
4. ModelBinder-metoden:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // Indikerar att en specifik modellbinder används för att lösa parametern
[ModelBinder(MyCustomBinder)] publik klass SomeType { } // Applicera denna regel på alla SomeType-typparametrar genom att deklarera attributet [ModelBidner(MyCustomBinder)] till en specifik typ SomeType
void Action(SomeType c) // Eftersom typen av c är SomeType tillämpas egenskaperna på SomeType för att bestämma dess modellbindning
Sammanfattning:
1. De enkla standardparametrarna skickas genom URL-parametrar, med undantag:
1.1 Om rutten innehåller id-parametern, skickas id-parametern genom rutten;
1.2 Om parametern är markerad som [FromBody], kan parametern vara en enkel parameter, och klienten kan skicka den via POST: $.ajax(url, '=value'), eller $.ajax({url: url, data: {'': 'value'}});
2. De standardkomplexa parametrarna (anpassade entitetsklasser) skickas via POST, med undantag:
2.1 Om parametervärdet markeras som [FromUri], kan parametern vara en komplex parameter;
3. En parameter märkt [FromBody] får endast visas en gång, en parameter märkt som [FromUri] kan förekomma flera gånger, och om parametern markerad som [FromUri] är en enkel parameter kan taggen tas bort. |