Ohjelmointi

Kuinka välittää useita parametreja Web-API-ohjaimen menetelmille

Aikaisemmassa täällä kirjoituksessa tutkimme parametrien sitomista Web-sovellusliittymässä. Tässä viestissä opimme, kuinka useita parametreja välitetään Web API -ohjaimen menetelmille.

Web-sovellusliittymä tarjoaa tarvittavat toimintamenetelmät HTTP GET-, POST-, PUT- ja DELETE-operaatioille. Voit yleensä siirtää yhden objektin parametrina PUT- ja POST-toimintamenetelmiin. Huomaa, että Web-sovellusliittymä ei tue oletusarvoisesti useiden POST-parametrien siirtämistä Web-API-ohjaimen menetelmille. Mutta entä jos tekisit POST-pyynnön useilla objekteilla, jotka välitetään parametreina Web-sovellusliittymän ohjaimen menetelmälle?

Ongelman ymmärtäminen

Web-sovellusliittymä ei salli sinun välittää useita monimutkaisia ​​objekteja Web-sovellusliittymän ohjaimen menetelmän allekirjoituksessa - voit lähettää vain yhden arvon Web-sovellusliittymän toimintamenetelmään. Tämä arvo puolestaan ​​voi olla jopa monimutkainen kohde. On mahdollista välittää useita arvoja POST- tai PUT-toiminnossa, kartoittamalla yksi parametri todelliseen sisältöön ja loput kyselymerkkijonojen kautta.

Seuraava ohjainluokka sisältää POST-menetelmän nimeltä Save, joka hyväksyy useita parametreja.

public class AuthorsController: ApiController

    {

[HttpPost]

public HttpResponseMessage Save (int-tunnus, merkkijono etunimi, merkkijono sukunimi, merkkijono-osoite)

        {

// Tavallinen koodi

return Request.CreateResponse (HttpStatusCode.OK, "Menestys ...");

        }

   }

Oletetaan nyt, että yrität soittaa Web API -ohjaimen menetelmää JQuerystä alla olevan kuvan mukaisesti.

$ .ajax ({

url: 'api / tekijät',

tyyppi: 'POST',

tiedot: {Id: 1, Etunimi: 'Joydip', Sukunimi: 'Kanjilal', Osoite: 'Hyderabad'},

dataType: 'json',

menestys: funktio (data) {

hälytys (tiedot);

}});

Valitettavasti tämä puhelu epäonnistuu, koska Web-sovellusliittymä ei voi käsitellä tätä pyyntöä. Vastaavasti, jos sinulla on Web API -ohjaimen menetelmä, joka hyväksyy useita monimutkaisia ​​objekteja, et voi vedota tähän menetelmään suoraan asiakkaalta suoraan eteenpäin.

[HttpPost]

public HttpResponseMessage PostAuthor (tekijän kirjoittaja, merkkijonon todennusToken)

{

// Tavallinen koodi

return Request.CreateResponse (HttpStatusCode.OK, "Menestys ...");

}

Voit välittää parametreja Web-API-ohjaimen menetelmille joko [FromBody] - tai [FromUri] -määritteillä. Huomaa, että [FromBody] -attribuuttia voidaan käyttää vain kerran menetelmän parametriluettelossa. Toistamiseksi sinun on sallittava välittää vain yksi arvo (yksinkertainen tai monimutkainen tyyppi) parametrina Web-sovellusliittymän ohjaimen menetelmälle [FromBody] -attribuutin käytössä. Voit välittää minkä tahansa määrän parametreja [FromUri] -attribuutilla, mutta se ei ole ihanteellinen ratkaisu meidän tapauksessamme.

Ja nyt, ratkaisu

Nyt kun olemme ymmärtäneet ongelman siirrettäessä parametreja Web-sovellusohjaimen menetelmälle, tutkitaan mahdollisia ratkaisuja. Yksi tapa saavuttaa tämä on välittää monimutkainen objekti [FromBody] -attribuuttina ja merkkijonoparametri Uri: n kautta alla olevan koodinpätkän mukaisesti.

$ .ajax ({

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

tyyppi: 'POST',

tiedot: JSON.stringify (tekijä),

dataType: 'json',

menestys: funktio (data) {

hälytys (tiedot);

}});

Sinun on muokattava Web-API-ohjaimen menetelmää vastaavasti kyselymerkkijonon jäsentämiseksi alla esitetyllä tavalla.

[HttpPost]

public HttpResponseMessage PostAuthor (kirjoittaja)

{

var data = Request.RequestUri.ParseQueryString ();

merkkijonon ehdot = queryItems ["authenticationToken"];

// Tavallinen koodi tietojen tallentamiseen tietokantaan

return Request.CreateResponse (HttpStatusCode.OK, "Menestys ...");

}

No, mutta entä jos sinulla on useita monimutkaisia ​​objekteja, jotka välitetään parametreina Web API -ohjaimen menetelmään? Voit luoda yhden objektin, joka kääri useita parametreja. Katso alla olevaa AuthorRequest-luokkaa.

public class AuthorRequest

   {

public Author Kirjoittaja {get; aseta; }

julkinen merkkijono Token {get; aseta; }

   }

Pohjimmiltaan voit kääriä useita parametreja yhteen luokkaan ja käyttää tätä luokkaa parametrina Web API -ohjaimen menetelmälle.

Tässä on päivitetty Web API -ohjaimen menetelmä.

[HttpPost]

public HttpResponseMessage PostAuthor (AuthorRequest-pyyntö)

  {

var author = pyyntö.Author;

var token = pyyntö.Token;

// Tavallinen koodi tietojen tallentamiseen tietokantaan

return Request.CreateResponse (HttpStatusCode.OK, "Menestys ...");

  }

Voit käyttää JObjectia myös jäsentää useita parametriarvoja objektista.

[HttpPost]

public HttpResponseMessage PostAuthor (JObject jsonData)

{

dynaaminen json = jsonData;

JObject jauthor = json.Author;

merkkijonotunnus = json.Token;

var author = jauthor.ToObject ();

// Tavallinen koodi tietojen tallentamiseen tietokantaan

return Request.CreateResponse (HttpStatusCode.OK, "Menestys ...");

}

Toinen tapa ratkaista tämä on käyttää FormDataCollection. Muuten, FormDataCollection on avain / arvo-parikokoelma, aivan kuten MVC: n FormCollection.

[HttpPost]

public HttpResponseMessage PostAuthor (FormDataCollection-lomake)

        {

var author = muoto.Get ("Kirjoittaja");

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

// Tavallinen koodi tietojen tallentamiseen tietokantaan

return Request.CreateResponse (HttpStatusCode.OK, "Menestys ...");

        }

Web-sovellusliittymäkehyksen laajennettavuuden ansiosta voit myös luoda oman mukautetun parametrin sideaineen laajentamalla HttpParameterBinding-luokkaa tukemaan useiden parametrien sitomista.

Kuinka tehdä enemmän ASP.NET- ja ASP.NET Core -sovelluksissa:

  • Kuinka käyttää muistin välimuistia ASP.NET Core -sovelluksessa
  • Kuinka käsitellä virheitä ASP.NET Web API: ssa
  • Kuinka välittää useita parametreja Web-API-ohjaimen menetelmille
  • Kuinka kirjataan pyyntö- ja vastaustiedot, ASP.NET Web API
  • Kuinka työskennellä HttpModulesin kanssa ASP.NET: ssä
  • Edistynyt versiointi ASP.NET Core Web -sovellusliittymässä
  • Kuinka riippuvuusinjektiota käytetään ASP.NET Core -sovelluksessa
  • Kuinka käyttää istuntoja ASP.NET: ssä
  • Kuinka työskennellä HTTPHandlersin kanssa ASP.NET: ssä
  • IHostedServicen käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka käyttää WCF SOAP -palvelua ASP.NET Core -sovelluksessa
  • Kuinka parantaa ASP.NET Core -sovellusten suorituskykyä
  • ASP.NET Core Web -sovellusliittymän kuluttaminen RestSharpin avulla
  • Kuinka kirjautua sisään ASP.NET Core -sovelluksessa
  • Kuinka käyttää MediatR: ää ASP.NET Core -sovelluksessa
  • Istunnon tilan käyttäminen ASP.NET Core -sovelluksessa
  • Kuinka Nancyä käytetään ASP.NET Core -sovelluksessa
  • Ymmärrä parametrien sitominen ASP.NET Web API: ssa
  • Tiedostojen lataaminen ASP.NET Core MVC: hen
  • Kuinka toteuttaa yleinen poikkeusten käsittely ASP.NET Core Web API: ssa
  • Terveystarkastusten toteuttaminen ASP.NET Core -sovelluksessa
  • Parhaat käytännöt välimuistiin tallentamisessa ASP.NET: ssä
  • Apache Kafka -viestien käyttäminen .NET-sovelluksessa
  • Kuinka CORS otetaan käyttöön Web-sovellusliittymässä
  • Milloin käyttää WebClientiä vs. HttpClient vs.HttpWebRequest
  • Kuinka työskennellä Redis-välimuistin kanssa .NET
  • Milloin Task.WaitAll vs. Task.WhenAll on .NET-verkossa