I et tidligere innlegg her undersøkte vi parameterbinding i Web API. I dette innlegget vil vi lære å overføre flere parametere til Web API-kontrollermetoder.
Web API gir de nødvendige handlingsmetodene for HTTP GET, POST, PUT og DELETE-operasjoner. Du vil vanligvis sende et enkelt objekt som parameter til PUT- og POST-handlingsmetodene. Merk at Web API ikke støtter overføring av flere POST-parametere til Web API-kontrollermetoder som standard. Men hva om du skulle komme med en POST-forespørsel med flere objekter sendt som parametere til en Web API-kontrollermetode?
Forstå problemet
Web API lar deg ikke sende flere komplekse objekter i metodesignaturen til en Web API-kontrollermetode - du kan bare legge inn en enkelt verdi til en Web API-handlingsmetode. Denne verdien kan igjen til og med være et komplekst objekt. Det er mulig å overføre flere verdier til en POST- eller en PUT-operasjon ved å tilordne en parameter til det faktiske innholdet og de gjenværende via spørringsstrenger.
Følgende kontrollerklasse inneholder en POST-metode kalt Save som godtar flere parametere.
offentlig klasse AuthorsController: ApiController{
[HttpPost]
offentlig HttpResponseMessage Lagre (int Id, streng Fornavn, streng Etternavn, streng Adresse)
{
// Vanlig kode
returner Request.CreateResponse (HttpStatusCode.OK, "Suksess ...");
}
}
Anta at du prøver å ringe til Web API-kontrollermetoden fra JQuery som vist nedenfor.
$ .ajax ({url: 'api / author',
type: 'POST',
data: {Id: 1, Fornavn: 'Joydip', Etternavn: 'Kanjilal', Adresse: 'Hyderabad'},
dataType: 'json',
suksess: funksjon (data) {
varsel (data);
}});
Dessverre vil denne samtalen mislykkes, siden denne forespørselen ikke kan behandles av Web API. På samme måte, hvis du har en Web API-kontrollermetode som godtar flere komplekse objekter, vil du ikke kunne påkalle denne metoden direkte fra en klient på en rett frem måte.
[HttpPost]public HttpResponseMessage PostAuthor (Forfatter forfatter, streng authenticationToken)
{
// Vanlig kode
returner Request.CreateResponse (HttpStatusCode.OK, "Suksess ...");
}
Du kan overføre parametere til Web API-kontrollermetoder ved hjelp av [FromBody] eller [FromUri] -attributtene. Merk at [FromBody] -attributtet bare kan brukes én gang i parameterlisten til en metode. For å gjenta, har du lov til å bare overføre en verdi (enkel eller kompleks type) som parameter til en Web API-kontrolleremetode når du bruker [FromBody] -attributtet. Du kan sende et hvilket som helst antall parametere ved hjelp av [FromUri] -attributtet, men det er ikke den ideelle løsningen i vårt tilfelle.
Og nå, løsningen
Nå som vi har forstått hva problemet er når vi overfører parametere til en Web API-kontrollermetode, kan vi utforske de mulige løsningene. En måte å oppnå dette på er å sende det komplekse objektet som et [FromBody] -attributt og strengparameteren via Uri som vist i kodebiten nedenfor.
$ .ajax ({url: 'api / author? authenticationToken = abcxyz',
type: 'POST',
data: JSON.stringify (forfatter),
dataType: 'json',
suksess: funksjon (data) {
varsel (data);
}});
Du må endre metoden for Web API-kontroller i samsvar med dette for å analysere spørringsstrengen som vist nedenfor.
[HttpPost]public HttpResponseMessage PostAuthor (Forfatter forfatter)
{
var data = Request.RequestUri.ParseQueryString ();
strengkriterier = queryItems ["authenticationToken"];
// Vanlig kode for å lagre data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Suksess ...");
}
Vel, men hva om du har flere komplekse objekter som skal sendes som parametere til Web API-kontrollermetoden? Du kan opprette et enkelt objekt som bryter inn flere parametere. Se AuthorRequest-klassen gitt nedenfor.
offentlig klasse Forfatterforespørsel{
offentlig Forfatter Forfatter {get; sett; }
offentlig streng Token {get; sett; }
}
I utgangspunktet kan du pakke inn flere parametere i en enkelt klasse og bruke denne klassen som en parameter til Web API-kontrollermetoden.
Her er den oppdaterte metoden for Web API-kontroller.
[HttpPost]offentlig HttpResponseMessage PostAuthor (forespørsel om forfatter)
{
var forfatter = forespørsel. forfatter;
var token = forespørsel.Token;
// Vanlig kode for å lagre data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Suksess ...");
}
Du kan også bruke JObject til å analysere flere parameterverdier fra et objekt.
[HttpPost]offentlig HttpResponseMessage PostAuthor (JObject jsonData)
{
dynamisk json = jsonData;
JObject jauthor = json.Author;
streng token = json.Token;
var forfatter = jauthor.ToObject ();
// Vanlig kode for å lagre data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Suksess ...");
}
En annen måte å løse dette på er ved å bruke FormDataCollection. Forresten er FormDataCollection en nøkkel / verdipar-samling omtrent som FormCollection i MVC.
[HttpPost]offentlig HttpResponseMessage PostAuthor (FormDataCollection form)
{
var forfatter = form.Get ("Forfatter");
var token = form.Get ("Token");
// Vanlig kode for å lagre data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Suksess ...");
}
Takket være utvidbarheten til Web API-rammeverket, kan du også opprette din egen tilpassede parameterbinder ved å utvide HttpParameterBinding-klassen for å gi støtte for binding av flere parametere.
Hvordan gjøre mer i ASP.NET og ASP.NET Core:
- Hvordan bruke hurtigbufring i minnet i ASP.NET Core
- Hvordan håndtere feil i ASP.NET Web API
- Hvordan overføre flere parametere til Web API-kontrollermetoder
- Hvordan logge forespørsels- og svarmetadata i ASP.NET Web API
- Hvordan jobbe med HttpModules i ASP.NET
- Avansert versjonering i ASP.NET Core Web API
- Hvordan bruke avhengighetsinjeksjon i ASP.NET Core
- Hvordan jobbe med økter i ASP.NET
- Hvordan jobbe med HTTPHandlers i ASP.NET
- Hvordan bruke IHostedService i ASP.NET Core
- Hvordan forbruke en WCF SOAP-tjeneste i ASP.NET Core
- Hvordan forbedre ytelsen til ASP.NET Core-applikasjoner
- Slik bruker du et ASP.NET Core Web API ved hjelp av RestSharp
- Hvordan jobbe med innlogging i ASP.NET Core
- Hvordan bruke MediatR i ASP.NET Core
- Hvordan jobbe med økttilstand i ASP.NET Core
- Hvordan bruke Nancy i ASP.NET Core
- Forstå parameterinnbinding i ASP.NET Web API
- Hvordan laste opp filer i ASP.NET Core MVC
- Hvordan implementere global unntaksbehandling i ASP.NET Core Web API
- Hvordan implementere helsesjekker i ASP.NET Core
- Beste fremgangsmåter for hurtigbufring i ASP.NET
- Hvordan bruke Apache Kafka-meldinger i .NET
- Hvordan aktivere CORS på web-API-et
- Når skal du bruke WebClient vs. HttpClient vs. HttpWebRequest
- Hvordan jobbe med Redis Cache i .NET
- Når skal jeg bruke Task.WaitAll vs. Task.WhenAll i .NET