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