Programiranje

Kako prenesti več parametrov v metode krmilnika spletnega API-ja

V prejšnjem prispevku smo raziskali vezavo parametrov v spletnem API-ju. V tej objavi bomo izvedeli, kako več parametrov posredujemo metodam krmilnika spletnega API-ja.

Spletni API nudi potrebne akcijske metode za operacije HTTP GET, POST, PUT in DELETE. Običajno pošljete en predmet kot parameter metodam PUT in POST. Upoštevajte, da spletni API privzeto ne podpira posredovanja več parametrov POST v metode krmilnika spletnega API-ja. Kaj pa, če bi zahtevali POST z več predmeti, ki so bili posredovani kot parametri v metodo krmilnika spletnega API-ja?

Razumevanje problema

Spletni API ne omogoča, da v podpisu metode metode krmilnika spletnega API prenesete več zapletenih predmetov - v akcijski metodi spletnega API-ja lahko objavite samo eno vrednost. Ta vrednost pa je lahko celo zapleten predmet. Mogoče je prenesti več vrednosti, čeprav v operaciji POST ali PUT, tako da en parameter preslikate na dejansko vsebino, preostale pa prek nizov poizvedb.

Naslednji razred krmilnika vsebuje metodo POST z imenom Save, ki sprejema več parametrov.

javni razred AuthorsController: ApiController

    {

[HttpPost]

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

        {

// Običajna koda

vrni Request.CreateResponse (HttpStatusCode.OK, "Uspeh ...");

        }

   }

Zdaj predpostavimo, da poskušate priklicati metodo krmilnika spletnega API-ja iz JQuery, kot je prikazano spodaj.

$ .ajax ({

url: 'api / avtorji',

vrsta: 'POST',

podatki: {Id: 1, Ime: 'Joydip', Priimek: 'Kanjilal', Naslov: 'Hyderabad'},

dataType: 'json',

uspeh: funkcija (podatki) {

opozorilo (podatki);

}});

Ta klic žal ne bo uspel, saj spletni zahtevek ne more obdelati te zahteve. Podobno, če imate metodo krmilnika spletnega API-ja, ki sprejema več kompleksnih objektov, te metode ne bi mogli neposredno priklicati neposredno od odjemalca.

[HttpPost]

public HttpResponseMessage PostAuthor (avtor avtorja, niza preverjanja pristnosti)

{

// Običajna koda

vrni Request.CreateResponse (HttpStatusCode.OK, "Uspeh ...");

}

Parametre lahko posredujete v metode krmilnika spletnega API-ja z uporabo atributov [FromBody] ali [FromUri]. Upoštevajte, da je atribut [FromBody] mogoče uporabiti samo enkrat na seznamu parametrov metode. Če želite ponoviti, lahko pri uporabi atributa [FromBody] kot parameter prenesete samo eno vrednost (preprost ali kompleksen tip) kot parameter v metodo krmilnika spletnega API-ja. Z atributom [FromUri] lahko prenesete poljubno število parametrov, vendar to v našem primeru ni idealna rešitev.

In zdaj, rešitev

Zdaj, ko smo razumeli, v čem je težava pri posredovanju parametrov v metodo krmilnika spletnega API-ja, raziščimo možne rešitve. Eden od načinov, kako to doseči, je posredovanje kompleksnega predmeta kot atributa [FromBody] in parametra niza prek Uri, kot je prikazano v spodnjem delčku kode.

$ .ajax ({

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

vrsta: 'POST',

podatki: JSON.stringify (avtor),

dataType: 'json',

uspeh: funkcija (podatki) {

opozorilo (podatki);

}});

Za razčlenitev niza poizvedbe boste morali ustrezno spremeniti način krmilnika spletnega API-ja, kot je prikazano spodaj.

[HttpPost]

public HttpResponseMessage PostAuthor (avtor avtorja)

{

var data = Request.RequestUri.ParseQueryString ();

niz meril = queryItems ["authenticationToken"];

// Običajna koda za shranjevanje podatkov v zbirki podatkov

vrni Request.CreateResponse (HttpStatusCode.OK, "Uspeh ...");

}

No, kaj pa, če imate več kompleksnih predmetov, ki jih je treba kot parametre prenesti v metodo krmilnika spletnega API-ja? Ustvarite lahko en predmet, ki zavije več parametrov. Glejte spodaj navedeni razred AvtorRequest.

javni razred AuthorRequest

   {

javni avtor Avtor {get; set; }

javni niz žetona {get; set; }

   }

V bistvu lahko v en razred zavijete več parametrov in ga uporabite kot parameter za svojo krmilno metodo spletnega API-ja.

Tu je posodobljena metoda krmilnika spletnega API-ja.

[HttpPost]

public HttpResponseMessage PostAuthor (Zahteva avtorja)

  {

var avtor = zahteva.Avtor;

var žeton = request.Token;

// Običajna koda za shranjevanje podatkov v zbirki podatkov

vrni Request.CreateResponse (HttpStatusCode.OK, "Uspeh ...");

  }

JObject lahko uporabite tudi za razčlenitev več vrednosti parametrov izven predmeta.

[HttpPost]

javni HttpResponseMessage PostAuthor (JObject jsonData)

{

dinamični json = jsonData;

JObject jauthor = json.Author;

niz žetona = json.Token;

var avtor = jauthor.ToObject ();

// Običajna koda za shranjevanje podatkov v zbirki podatkov

vrni Request.CreateResponse (HttpStatusCode.OK, "Uspeh ...");

}

Drug način za rešitev tega je z uporabo FormDataCollection. Mimogrede, FormDataCollection je zbirka par ključ / vrednost, podobno kot FormCollection v MVC.

[HttpPost]

public HttpResponseMessage PostAuthor (obrazec FormDataCollection)

        {

var avtor = form.Get ("Avtor");

var žeton = form.Get ("Token");

// Običajna koda za shranjevanje podatkov v zbirki podatkov

vrni Request.CreateResponse (HttpStatusCode.OK, "Uspeh ...");

        }

Zahvaljujoč razširljivosti okvira spletnega API-ja lahko ustvarite tudi svoje vezivo parametrov po meri, tako da razširite razred HttpParameterBinding, da zagotovite podporo za vezavo več parametrov.

Kako narediti več v ASP.NET in ASP.NET Core:

  • Kako uporabljati predpomnjenje v pomnilniku v ASP.NET Core
  • Kako ravnati z napakami v spletnem API-ju ASP.NET
  • Kako prenesti več parametrov v metode krmilnika spletnega API-ja
  • Kako zapisati metapodatke zahtev in odzivov v spletni API ASP.NET
  • Kako delati s HttpModules v ASP.NET
  • Napredno spreminjanje različic v ASP.NET Core Web API
  • Kako uporabiti vbrizgavanje odvisnosti v ASP.NET Core
  • Kako delati s sejami v ASP.NET
  • Kako delati z HTTPHandlers v ASP.NET
  • Kako uporabljati IHostedService v ASP.NET Core
  • Kako porabiti storitev WCF SOAP v ASP.NET Core
  • Kako izboljšati delovanje aplikacij ASP.NET Core
  • Kako porabiti spletni API ASP.NET Core s pomočjo RestSharp
  • Kako delati s prijavo v ASP.NET Core
  • Kako uporabljati MediatR v ASP.NET Core
  • Kako delati s stanjem seje v ASP.NET Core
  • Kako uporabljati Nancy v ASP.NET Core
  • Razumevanje vezave parametrov v spletnem API-ju ASP.NET
  • Kako naložiti datoteke v ASP.NET Core MVC
  • Kako implementirati globalno obravnavo izjem v ASP.NET Core Web API
  • Kako izvajati zdravstvene preglede v ASP.NET Core
  • Najboljše prakse predpomnjenja v ASP.NET
  • Kako uporabljati sporočila Apache Kafka v .NET
  • Kako omogočiti CORS v spletnem API-ju
  • Kdaj uporabiti WebClient v primerjavi s HttpClient v primerjavi s HttpWebRequest
  • Kako delati s predpomnilnikom Redis v .NET
  • Kdaj uporabiti Task.WaitAll v primerjavi z Task.WhenAll v .NET
$config[zx-auto] not found$config[zx-overlay] not found