Programmering

Hvordan overføre flere parametere til Web API-kontrollermetoder

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
$config[zx-auto] not found$config[zx-overlay] not found