Programavimas

Kaip perduoti kelis parametrus žiniatinklio API valdiklio metodams

Ankstesniame įraše mes ištyrėme parametrų susiejimą žiniatinklio API. Šiame įraše sužinosime, kaip perduoti kelis parametrus žiniatinklio API valdiklio metodams.

Žiniatinklio API pateikia būtinus HTTP GET, POST, PUT ir DELETE veiksmų metodus. Paprastai vieną objektą kaip parametrą perduotumėte PUT ir POST veiksmų metodams. Atminkite, kad žiniatinklio API pagal numatytuosius parametrus nepalaiko kelių POST parametrų perdavimo žiniatinklio API valdiklio metodams. Bet ką daryti, jei pateikiate POST užklausą su keliais objektais, kurie kaip parametrai perduodami žiniatinklio API valdiklio metodui?

Problemos supratimas

Žiniatinklio API neleidžia perduoti kelių sudėtingų objektų žiniatinklio API valdiklio metodo metodo paraše - į žiniatinklio API veiksmų metodą galite paskelbti tik vieną vertę. Ši vertė savo ruožtu gali būti net sudėtingas objektas. POST arba PUT operacijoje galima perduoti kelias reikšmes, susiejant vieną parametrą su faktiniu turiniu ir likusius per užklausos eilutes.

Šioje valdiklio klasėje yra POST metodas pavadinimu Išsaugoti, kuris priima kelis parametrus.

public class AuthorsController: ApiController

    {

[HttpPost]

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

        {

// Įprastas kodas

grąžinti Request.CreateResponse (HttpStatusCode.OK, "Sėkmė ...");

        }

   }

Dabar tarkime, kad bandote iškviesti žiniatinklio API valdiklio metodą iš „JQuery“, kaip parodyta žemiau.

$ .ajax ({

URL: „api / author“,

tipas: „POST“,

duomenys: {Id: 1, FirstName: 'Joydip', Pavardė: 'Kanjilal', Adresas: 'Hyderabad'},

dataType: 'json',

sėkmė: funkcija (duomenys) {

perspėjimas (duomenys);

}});

Deja, šis skambutis nepavyks, nes šios užklausos negalima apdoroti žiniatinklio API. Panašiai, jei turite žiniatinklio API valdiklio metodą, kuris priima kelis sudėtingus objektus, negalėtumėte tiesiogiai iškviesti šio metodo iš kliento.

[HttpPost]

public HttpResponseMessage PostAuthor (Autoriaus autorius, eilutės autentifikavimas „Token“)

{

// Įprastas kodas

grąžinti Request.CreateResponse (HttpStatusCode.OK, "Sėkmė ...");

}

Parametrus galite perduoti žiniatinklio API valdiklio metodams naudodami [FromBody] arba [FromUri] atributus. Atminkite, kad [FromBody] atributas gali būti naudojamas tik vieną kartą metodo parametrų sąraše. Norėdami pakartoti, galite naudoti tik vieną vertę (paprastą ar sudėtingą) kaip parametrą žiniatinklio API valdiklio metodui, kai naudojate atributą [FromBody]. Galite perduoti bet kokį parametrų skaičių naudodami [FromUri] atributą, tačiau tai nėra idealus sprendimas mūsų atveju.

Ir dabar, sprendimas

Dabar, kai supratome, kokia yra problema perduodant parametrus žiniatinklio API valdiklio metodui, panagrinėkime galimus sprendimus. Vienas iš būdų tai pasiekti yra perduoti sudėtingą objektą kaip [FromBody] atributą ir eilutės parametrą per URI, kaip parodyta žemiau esančiame kodo fragmente.

$ .ajax ({

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

tipas: „POST“,

duomenys: JSON.stringify (autorius),

dataType: 'json',

sėkmė: funkcija (duomenys) {

perspėjimas (duomenys);

}});

Turėtumėte atitinkamai modifikuoti žiniatinklio API valdiklio metodą, kad analizuotumėte užklausos eilutę, kaip parodyta žemiau.

[HttpPost]

public HttpResponseMessage PostAuthor (Autorius)

{

var duomenys = Request.RequestUri.ParseQueryString ();

eilutės kriterijai = queryItems ["authenticationToken"];

// Įprastas kodas duomenims saugoti duomenų bazėje

grąžinti Request.CreateResponse (HttpStatusCode.OK, "Sėkmė ...");

}

Na, bet ką daryti, jei turite kelis sudėtingus objektus, kuriuos reikia perduoti kaip parametrus žiniatinklio API valdiklio metodui? Galite sukurti vieną objektą, kuris apvynioja kelis parametrus. Žiūrėkite žemiau pateiktą „AuthorRequest“ klasę.

visuomenės klasė Autoriaus prašymas

   {

public Autorius Autorius {get; rinkinys; }

public string Token {get; rinkinys; }

   }

Iš esmės, galite apvynioti kelis parametrus vienoje klasėje ir naudoti šią klasę kaip parametrą savo žiniatinklio API valdiklio metodui.

Čia yra atnaujintas žiniatinklio API valdiklio metodas.

[HttpPost]

public HttpResponseMessage PostAuthor („AuthorRequest“ užklausa)

  {

var author = prašymas.Autorius;

var token = užklausa.Token;

// Įprastas kodas duomenims saugoti duomenų bazėje

grąžinti Request.CreateResponse (HttpStatusCode.OK, "Sėkmė ...");

  }

Taip pat galite naudoti JObject, kad išanalizuotumėte kelių parametrų reikšmes iš objekto.

[HttpPost]

public HttpResponseMessage PostAuthor („JObject jsonData“)

{

dinamiškas json = jsonData;

JObject jauthor = json.Author;

eilutės žetonas = json.Token;

var autor = jauthor.ToObject ();

// Įprastas kodas duomenims saugoti duomenų bazėje

grąžinti Request.CreateResponse (HttpStatusCode.OK, "Sėkmė ...");

}

Kitas būdas tai išspręsti yra naudojant „FormDataCollection“. Beje, „FormDataCollection“ yra raktų / reikšmių porų rinkinys, panašiai kaip „FormCollection“ MVC.

[HttpPost]

public HttpResponseMessage PostAuthor (FormDataCollection forma)

        {

var author = forma.Get ("Autorius");

var token = forma.Get („Žetonas“);

// Įprastas kodas duomenims saugoti duomenų bazėje

grąžinti Request.CreateResponse (HttpStatusCode.OK, "Sėkmė ...");

        }

Dėl žiniatinklio API sistemos išplėtimo taip pat galite sukurti savo pasirinktinių parametrų segtuvą, išplėsdami „HttpParameterBinding“ klasę, kad būtų palaikomas kelių parametrų susiejimas.

Kaip padaryti daugiau naudojant ASP.NET ir ASP.NET Core:

  • Kaip naudoti atminties talpyklą ASP.NET Core
  • Kaip tvarkyti klaidas ASP.NET žiniatinklio API
  • Kaip perduoti kelis parametrus žiniatinklio API valdiklio metodams
  • Kaip registruoti užklausos ir atsakymo metaduomenis ASP.NET žiniatinklio API
  • Kaip dirbti su „HttpModules“ ASP.NET
  • Išplėstinė ASP.NET „Core Web API“ versijų versija
  • Kaip naudoti priklausomybės injekciją ASP.NET Core
  • Kaip dirbti su sesijomis ASP.NET
  • Kaip dirbti su HTTPHandleriais sistemoje ASP.NET
  • Kaip naudoti „IHostedService“ ASP.NET Core
  • Kaip vartoti WCF SOAP paslaugą ASP.NET Core
  • Kaip pagerinti ASP.NET Core programų veikimą
  • Kaip suvartoti ASP.NET Core Web API naudojant „RestSharp“
  • Kaip dirbti su registravimu ASP.NET Core
  • Kaip naudoti „MediatR“ ASP.NET Core
  • Kaip dirbti su seanso būsena ASP.NET Core
  • Kaip naudoti „Nancy“ ASP.NET Core
  • Supraskite parametrų susiejimą ASP.NET žiniatinklio API
  • Kaip įkelti failus į ASP.NET Core MVC
  • Kaip įdiegti visuotinį išimčių tvarkymą ASP.NET Core Web API
  • Kaip atlikti sveikatos patikrinimus ASP.NET Core
  • Geriausia ASP.NET talpyklos talpinimo praktika
  • Kaip naudoti „Apache Kafka“ pranešimus .NET
  • Kaip įgalinti CORS savo žiniatinklio API
  • Kada naudoti „WebClient“, palyginti su „HttpClient“ ir „HttpWebRequest“
  • Kaip dirbti su „Redis Cache“ .NET
  • Kada .NET naudoti „Task.WaitAll“ ir „Task.WhenAll“
$config[zx-auto] not found$config[zx-overlay] not found