I et tidligere indlæg her undersøgte vi parameterbinding i Web API. I dette indlæg vil vi lære at overføre flere parametre til Web API-controller-metoder.
Web API giver de nødvendige handlingsmetoder til HTTP GET, POST, PUT og DELETE-operationer. Du sender typisk et enkelt objekt som parameter til PUT- og POST-handlingsmetoderne. Bemærk, at Web API ikke understøtter overførsel af flere POST-parametre til Web API-controller-metoder som standard. Men hvad nu hvis du skulle lave en POST-anmodning med flere objekter sendt som parametre til en Web API-controller-metode?
Forståelse af problemet
Web API giver dig ikke mulighed for at videregive flere komplekse objekter i metodesignaturen til en Web API-controller-metode - du kan kun sende en enkelt værdi til en Web API-handlingsmetode. Denne værdi kan igen endda være et komplekst objekt. Det er muligt at overføre flere værdier dog til en POST- eller en PUT-operation ved at kortlægge en parameter til det faktiske indhold og de resterende via forespørgselsstrenge.
Følgende controller-klasse indeholder en POST-metode ved navn Save, der accepterer flere parametre.
offentlig klasse AuthorsController: ApiController{
[HttpPost]
offentlig HttpResponseMessage Gem (int Id, streng Fornavn, streng Efternavn, streng Adresse)
{
// Almindelig kode
returner Request.CreateResponse (HttpStatusCode.OK, "Succes ...");
}
}
Antag nu, at du forsøger at ringe til Web API-controller-metoden fra JQuery som vist nedenfor.
$ .ajax ({url: 'api / forfattere',
type: 'POST',
data: {Id: 1, Fornavn: 'Joydip', Efternavn: 'Kanjilal', Adresse: 'Hyderabad'},
dataType: 'json',
succes: funktion (data) {
alarm (data);
}});
Desværre mislykkes dette opkald, da denne anmodning ikke kan behandles af Web API. Tilsvarende, hvis du har en Web API-controller-metode, der accepterer flere komplekse objekter, ville du ikke være i stand til at påkalde denne metode direkte fra en klient på en ligetil måde.
[HttpPost]public HttpResponseMessage PostAuthor (Forfatterforfatter, streng authenticationToken)
{
// Almindelig kode
returner Request.CreateResponse (HttpStatusCode.OK, "Succes ...");
}
Du kan videregive parametre til Web API-controller-metoder ved hjælp af enten [FromBody] eller [FromUri] -attributterne. Bemærk, at attributten [FromBody] kun kan bruges én gang i parameterlisten for en metode. For at gentage er det tilladt, at du kun overfører en værdi (enkel eller kompleks type) som parameter til en Web API-controller-metode, når du bruger attributten [FromBody]. Du kan videregive et vilkårligt antal parametre ved hjælp af [FromUri] -attributten, men det er ikke den ideelle løsning i vores tilfælde.
Og nu, løsningen
Nu hvor vi har forstået, hvad problemet er, når vi sender parametre til en Web API-controller-metode, lad os undersøge de mulige løsninger. En måde at opnå dette på er ved at sende det komplekse objekt som en [FromBody] -attribut og strengparameteren via Uri som vist i nedenstående kodestykke.
$ .ajax ({url: 'api / forfattere? authenticationToken = abcxyz',
type: 'POST',
data: JSON.stringify (forfatter),
dataType: 'json',
succes: funktion (data) {
alarm (data)
}});
Du bliver nødt til at ændre din Web API-controller-metode i overensstemmelse hermed for at analysere forespørgselsstrengen som vist nedenfor.
[HttpPost]public HttpResponseMessage PostAuthor (Forfatterforfatter)
{
var data = Request.RequestUri.ParseQueryString ();
strengkriterier = queryItems ["authenticationToken"];
// Almindelig kode til lagring af data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Succes ...");
}
Nå, men hvad hvis du har flere komplekse objekter, der skal sendes som parametre til Web API-controller-metoden? Du kan oprette et enkelt objekt, der omslutter de flere parametre. Se klassen AuthorRequest angivet nedenfor.
offentlig klasse AuthorRequest{
offentlig forfatter Forfatter {get; sæt; }
offentlig streng Token {get; sæt; }
}
Dybest set kan du pakke flere parametre i en enkelt klasse og bruge denne klasse som en parameter til din Web API-controller-metode.
Her er den opdaterede Web API-controller-metode.
[HttpPost]public HttpResponseMessage PostAuthor (AuthorRequest anmodning)
{
var author = anmodning. forfatter;
var token = anmodning.Token;
// Almindelig kode til lagring af data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Succes ...");
}
Du kan også bruge JObject til at analysere flere parameterværdier fra et objekt.
[HttpPost]offentlig HttpResponseMessage PostAuthor (JObject jsonData)
{
dynamisk json = jsonData;
JObject jauthor = json.Author;
streng token = json.Token;
var forfatter = jauthor.ToObject ();
// Almindelig kode til lagring af data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Succes ...");
}
En anden måde at løse dette på er ved hjælp af FormDataCollection. I øvrigt er FormDataCollection en nøgle / værdipar-samling, ligesom FormCollection i MVC.
[HttpPost]offentlig HttpResponseMessage PostAuthor (FormDataCollection form)
{
var forfatter = form.Get ("Forfatter");
var token = form.Get ("Token");
// Almindelig kode til lagring af data i databasen
returner Request.CreateResponse (HttpStatusCode.OK, "Succes ...");
}
Takket være Web API-rammes udvidelse kan du også oprette din egen brugerdefinerede parameterbinder ved at udvide klassen HttpParameterBinding for at yde support til binding af flere parametre.
Sådan gør du mere i ASP.NET og ASP.NET Core:
- Sådan bruges cache i hukommelsen i ASP.NET Core
- Sådan håndteres fejl i ASP.NET Web API
- Sådan overføres flere parametre til Web API-controller-metoder
- Sådan logges anmodnings- og svarmetadata i ASP.NET Web API
- Sådan arbejder du med HttpModules i ASP.NET
- Avanceret versionering i ASP.NET Core Web API
- Sådan bruges afhængighedsinjektion i ASP.NET Core
- Sådan arbejder du med sessioner i ASP.NET
- Sådan arbejder du med HTTPHandlers i ASP.NET
- Sådan bruges IHostedService i ASP.NET Core
- Sådan forbruges en WCF SOAP-tjeneste i ASP.NET Core
- Sådan forbedres ydeevnen for ASP.NET Core-applikationer
- Sådan forbruges en ASP.NET Core Web API ved hjælp af RestSharp
- Sådan arbejder du med logning i ASP.NET Core
- Sådan bruges MediatR i ASP.NET Core
- Sådan arbejder du med sessionstilstand i ASP.NET Core
- Sådan bruges Nancy i ASP.NET Core
- Forstå parameterbinding i ASP.NET Web API
- Sådan uploades filer i ASP.NET Core MVC
- Sådan implementeres global undtagelseshåndtering i ASP.NET Core Web API
- Sådan implementeres sundhedstjek i ASP.NET Core
- Bedste fremgangsmåder inden caching i ASP.NET
- Sådan bruges Apache Kafka-meddelelser i .NET
- Sådan aktiveres CORS på din web-API
- Hvornår skal man bruge WebClient vs. HttpClient vs. HttpWebRequest
- Sådan arbejder du med Redis Cache i .NET
- Hvornår skal man bruge Task.WaitAll vs. Task.WhenAll i .NET