Programmēšana

Kā pārsūtīt vairākus parametrus Web API kontroliera metodēm

Iepriekšējā ziņojumā šeit mēs izpētījām parametru saistīšanu Web API. Šajā amatā mēs uzzināsim, kā Web API kontroliera metodēm nodot vairākus parametrus.

Web API nodrošina nepieciešamās darbības metodes HTTP GET, POST, PUT un DELETE darbībām. Parasti PUT un POST darbības metodēm jūs kā parametru nodotu vienu objektu. Ņemiet vērā, ka Web API neatbalsta vairāku POST parametru pārsūtīšanu Web API kontroliera metodēm pēc noklusējuma. Bet kā būtu, ja jūs izveidotu POST pieprasījumu ar vairākiem objektiem, kas kā parametri tiek nodoti Web API kontroliera metodei?

Problēmas izpratne

Web API neļauj jums nodot vairākus sarežģītus objektus Web API kontrollera metodes metodes parakstā - Web API darbības metodē varat izlikt tikai vienu vērtību. Šī vērtība savukārt var būt pat sarežģīts objekts. Ir iespējams nodot vairākas vērtības, lai gan POST vai PUT operācijā, kartējot vienu parametru faktiskajam saturam, bet pārējos - ar vaicājuma virknēm.

Šī kontroliera klase satur POST metodi ar nosaukumu Saglabāt, kas pieņem vairākus parametrus.

publiskā klase AuthorsController: ApiController

    {

[HttpPost]

public HttpResponseMessage Save (int Id, string FirstName, string LastName, string Address)

        {

// Parastais kods

atgriezt Request.CreateResponse (HttpStatusCode.OK, "Panākumi ...");

        }

   }

Tagad pieņemsim, ka mēģināt izsaukt Web API kontroliera metodi no JQuery, kā parādīts zemāk.

$ .ajax ({

url: “api / autori”,

tips: 'POST',

dati: {Id: 1, FirstName: 'Joydip', Uzvārds: 'Kanjilal', Adrese: 'Hyderabad'},

dataType: 'json',

veiksme: funkcija (dati) {

brīdinājums (dati);

}});

Diemžēl šis zvans neizdosies, jo Web API nevar apstrādāt šo pieprasījumu. Līdzīgi, ja jums ir Web API kontroliera metode, kas pieņem vairākus sarežģītus objektus, jūs nevarēsiet tieši izsaukt šo metodi no klienta tieši.

[HttpPost]

public HttpResponseMessage PostAuthor (Autora autors, virknes autentifikācijaToken)

{

// Parastais kods

atgriezt Request.CreateResponse (HttpStatusCode.OK, "Panākumi ...");

}

Jūs varat nodot parametrus Web API kontroliera metodēm, izmantojot atribūtus [FromBody] vai [FromUri]. Ņemiet vērā, ka atribūtu [FromBody] metodes parametru sarakstā var izmantot tikai vienu reizi. Lai atkārtotu, Web API kontroliera metodei ir atļauts nodot tikai vienu vērtību (vienkāršu vai sarežģītu tipu), izmantojot atribūtu [FromBody]. Izmantojot [FromUri] atribūtu, jūs varat nodot jebkuru parametru skaitu, taču tas mūsu gadījumā nav ideāls risinājums.

Un tagad, risinājums

Tagad, kad esam sapratuši, kāda ir problēma, nododot parametrus Web API kontroliera metodei, izpētīsim iespējamos risinājumus. Viens no veidiem, kā to panākt, ir kompleksa objekta kā atribūta [FromBody] un virknes parametra nodošana caur Uri, kā parādīts zemāk esošajā koda fragmentā.

$ .ajax ({

url: 'api / autori? authenticationToken = abcxyz',

tips: 'POST',

dati: JSON.stringify (autors),

dataType: 'json',

veiksme: funkcija (dati) {

brīdinājums (dati);

}});

Jums būs attiecīgi jāmaina sava Web API kontrollera metode, lai parsētu vaicājuma virkni, kā parādīts zemāk.

[HttpPost]

public HttpResponseMessage PostAuthor (Autora autors)

{

var dati = Request.RequestUri.ParseQueryString ();

virknes kritēriji = queryItems ["authenticationToken"];

// Parasts kods datu glabāšanai datu bāzē

atgriezt Request.CreateResponse (HttpStatusCode.OK, "Panākumi ...");

}

Nu, bet ko darīt, ja jums ir vairāki sarežģīti objekti, kas kā parametri jānodod Web API kontroliera metodei? Jūs varat izveidot vienu objektu, kas aptin vairākus parametrus. Skatiet zemāk norādīto AuthorRequest klasi.

publiskā klase Autora pieprasījums

   {

publisks Autors Autors {get; komplekts; }

public string Token {get; komplekts; }

   }

Būtībā jūs varat ietīt vairākus parametrus vienā klasē un izmantot šo klasi kā parametru savai Web API kontroliera metodei.

Šeit ir atjaunināta Web API kontroliera metode.

[HttpPost]

public HttpResponseMessage PostAuthor (Autora pieprasījuma pieprasījums)

  {

var autors = pieprasījums. Autors;

var token = pieprasījums.Token;

// Parasts kods datu glabāšanai datu bāzē

atgriezt Request.CreateResponse (HttpStatusCode.OK, "Panākumi ...");

  }

Varat arī izmantot JObject, lai parsētu vairākas parametru vērtības no objekta.

[HttpPost]

public HttpResponseMessage PostAuthor (JObject jsonData)

{

dinamisks json = jsonData;

JObject jauthor = json.Author;

virknes marķieris = json.Token;

var autors = jauthor.ToObject ();

// Parasts kods datu glabāšanai datu bāzē

atgriezt Request.CreateResponse (HttpStatusCode.OK, "Panākumi ...");

}

Vēl viens veids, kā to atrisināt, ir FormDataCollection izmantošana. Starp citu, FormDataCollection ir atslēgu / vērtību pāra kolekcija, līdzīgi kā FormCollection MVC.

[HttpPost]

public HttpResponseMessage PostAuthor (FormDataCollection forma)

        {

var autors = forma.Get ("Autors");

var token = forma.Get ("Token");

// Parasts kods datu glabāšanai datu bāzē

atgriezt Request.CreateResponse (HttpStatusCode.OK, "Panākumi ...");

        }

Pateicoties Web API ietvara paplašināmībai, varat izveidot arī savu pielāgoto parametru saistvielu, paplašinot HttpParameterBinding klasi, lai nodrošinātu atbalstu vairāku parametru saistīšanai.

Kā darīt vairāk programmās ASP.NET un ASP.NET Core:

  • Kā izmantot atmiņas kešatmiņu ASP.NET Core
  • Kā rīkoties ar kļūdām ASP.NET Web API
  • Kā pārsūtīt vairākus parametrus Web API kontroliera metodēm
  • Kā reģistrēt pieprasījuma un atbildes metadatus ASP.NET Web API
  • Kā strādāt ar HttpModules ASP.NET
  • Uzlabota versiju veidošana ASP.NET Core Web API
  • Kā izmantot atkarības injekciju ASP.NET Core
  • Kā strādāt ar sesijām ASP.NET
  • Kā strādāt ar HTTPHandleriem ASP.NET
  • Kā izmantot IHostedService ASP.NET Core
  • Kā patērēt WCF SOAP pakalpojumu ASP.NET Core
  • Kā uzlabot ASP.NET Core lietojumprogrammu veiktspēju
  • Kā patērēt ASP.NET Core Web API, izmantojot RestSharp
  • Kā strādāt ar reģistrēšanos ASP.NET Core
  • Kā izmantot MediatR ASP.NET Core
  • Kā strādāt ar sesijas stāvokli ASP.NET Core
  • Kā Nancy izmantot ASP.NET Core
  • Izprotiet parametru saistīšanu ASP.NET Web API
  • Kā augšupielādēt failus ASP.NET Core MVC
  • Kā ieviest globālo izņēmumu apstrādi ASP.NET Core Web API
  • Kā ieviest veselības pārbaudes ASP.NET Core
  • Labākā prakse kešatmiņā ASP.NET
  • Kā izmantot Apache Kafka ziņojumapmaiņu .NET
  • Kā iespējot CORS savā tīmekļa API
  • Kad lietot WebClient pret HttpClient pret HttpWebRequest
  • Kā strādāt ar Redis kešatmiņu .NET
  • Kad .NET izmantot Task.WaitAll pret Task.WhenAll
$config[zx-auto] not found$config[zx-overlay] not found