Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 27609|Antwoord: 3

[WebAPI] WebAPI kan niet meerdere parameters (SB en SB1) binden aan de inhoud van het verzoek

[Link kopiëren]
Geplaatst op 16-08-2016 13:52:38 | | | |



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.




Vorig:.NET Oracle multi-tabel querymethode, een domme methode.
Volgend:C# gebruikt reflectie om te bepalen of een eigenschap wordt toegewezen
Geplaatst op 16-08-2016 15:21:29 |
ModelBinder zou een featureklasse moeten hebben voor ModelBinderAttribute

Vergelijkbaar met filters
Geplaatst op 16-08-2016 15:21:44 |
Kom elke dag op bezoek
Geplaatst op 16-08-2016 15:22:00 |
Geef me wat prestige
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com