In WebAPI kan het verzoeklichaam (HttpContent) slechts één keer worden gelezen, niet gecacht, en alleen doorgelezen.
Bijvoorbeeld:
1. Verzoekadres: /?id=123&name=bob
Server-side methode: void Action(int id, string name) // Alle parameters zijn eenvoudige types, dus ze komen allemaal van de url
2. Aanvraagadres: /?id=123&name=bob
Server-side methode: void Action([FromUri] int id, [FromUri] string name) // Hetzelfde als hierboven
void Actie([FromBody] stringnaam); Het [FormBody]-attribuut geeft aan dat het hele lichaam wordt gelezen als een string als argument
3. Aanvraagadres: /?id=123
Klassedefinitie:
publieke klasse Customer { // Een complex objecttype gedefinieerd publieke string Naam { get; set; } publieke int Age { get; set; }
}
Server-side methode: void Action(int id, Customer c) // Parameter-id wordt gelezen uit de querystring, parameter c is een complexe Customer-objectklasse, gelezen uit body via formatter
Server-side method: void action(Klant c1, Klant c2) // Fout! Meerdere parameters zijn complexe types en proberen allemaal uit een lichaam te lezen, dat slechts één keer kan worden gelezen
Server-side methode: void action([FromUri] Customer c1, Customer c2) // Yes! In tegenstelling tot bovenstaande actie wordt het complexe type C1 gelezen van de URL en C2 van het hoofddeel
4. ModelBinder-methode:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // Geeft aan dat een specifieke modelbinder wordt gebruikt om de parameter op te lossen
[ModelBinder(MyCustomBinder)] publieke klasse SomeType { } // Pas deze regel toe op alle SomeType-typeparameters door het [ModelBidner(MyCustomBinder)] attribuut aan een specifiek type SomeType toe te wijzen
void Action(SomeType c) // Aangezien het type c SomeType is, worden de kenmerken op SomeType toegepast om de modelbinding te bepalen
Samenvatting:
1. De standaard eenvoudige parameters worden via URL-parameters doorgegeven, met uitzonderingen:
1.1 Als de route de id-parameter bevat, wordt de id-parameter door de route doorgegeven;
1.2 Als de parameter is gemarkeerd als [FromBody], kan de parameter een eenvoudige parameter zijn, en kan de client deze doorgeven via POST: $.ajax(url, '=value'), of $.ajax({url: url, data: {'': 'value'}});
2. De standaard complexe parameters (aangepaste entiteitsklassen) worden via POST doorgegeven, met uitzonderingen:
2.1 Als de parameterwaarde is gemarkeerd als [FromUri], kan de parameter een complexe parameter zijn;
3. Een parameter gemarkeerd met [FromBody] mag slechts één keer verschijnen, een parameter gemarkeerd als [FromUri] kan meerdere keren voorkomen, en als de parameter gemarkeerd als [FromUri] een eenvoudige parameter is, kan de tag worden verwijderd. |