Programovanie

Ako odovzdať viaceré parametre metódam radiča webového API

V predchádzajúcom príspevku sme preskúmali väzbu parametrov vo webovom rozhraní API. V tomto príspevku sa dozvieme, ako odovzdať viaceré parametre metódam radiča webového API.

Webové rozhranie API poskytuje potrebné metódy akcií pre operácie HTTP GET, POST, PUT a DELETE. Obvykle by ste jeden objekt odovzdali ako parameter metódam akcie PUT a POST. Upozorňujeme, že webové rozhranie API predvolene nepodporuje odovzdávanie viacerých parametrov POST metódam radiča webového rozhrania API. Ale čo keby ste urobili požiadavku POST s viacerými objektmi odovzdanými ako parametre metóde radiča webového API?

Pochopenie problému

Web API vám neumožňuje odovzdať viac zložitých objektov v podpisu metódy metódy radiča webového API - do metódy akcie webového API môžete odoslať iba jednu hodnotu. Táto hodnota zase môže byť dokonca zložitým objektom. Je možné odovzdať viac hodnôt v operácii POST alebo PUT mapovaním jedného parametra na skutočný obsah a zvyšných pomocou reťazcov dotazu.

Nasledujúca trieda radiča obsahuje metódu POST s názvom Save, ktorá prijíma viac parametrov.

verejná trieda AuthorsController: ApiController

    {

[HttpPost]

verejné uloženie HttpResponseMessage (int ID, reťazec Krstné meno, reťazec Priezvisko, adresa reťazca)

        {

// Obvyklý kód

návrat Request.CreateResponse (HttpStatusCode.OK, "Úspech ...");

        }

   }

Teraz predpokladajme, že sa pokúsite zavolať metódu radiča webového API z JQuery, ako je uvedené nižšie.

$ .ajax ({

adresa URL: „api / autori“,

typ: 'POST',

údaje: {Id: 1, meno: 'Joydip', priezvisko: 'Kanjilal', adresa: 'Hyderabad'},

dataType: 'json',

success: function (data) {

výstraha (údaje);

}});

Toto volanie bohužiaľ zlyhá, pretože túto požiadavku nie je možné spracovať pomocou webového rozhrania API. Podobne, ak máte metódu radiča webového API, ktorá prijíma viac zložitých objektov, nebudete môcť túto metódu priamo vyvolať z klienta.

[HttpPost]

verejná HttpResponseMessage PostAuthor (autor, autor, reťazec authenticationToken)

{

// Obvyklý kód

návrat Request.CreateResponse (HttpStatusCode.OK, "Úspech ...");

}

Parametre môžete odovzdať metódam radiča webového API pomocou atribútov [FromBody] alebo [FromUri]. Upozorňujeme, že atribút [FromBody] je možné v zozname parametrov metódy použiť iba raz. Zopakujeme, že pri použití atribútu [FromBody] môžete ako parameter odovzdať iba jednu hodnotu (jednoduchý alebo zložitý typ) ako parameter metóde radiča webového API. Pomocou atribútu [FromUri] môžete zadať ľubovoľný počet parametrov, čo však nie je v našom prípade ideálne riešenie.

A teraz riešenie

Teraz, keď sme pochopili, v čom je problém pri odovzdávaní parametrov metóde radiča webového API, poďme preskúmať možné riešenia. Jedným zo spôsobov, ako to dosiahnuť, je odovzdanie komplexného objektu ako atribútu [FromBody] a parametra reťazca cez Uri, ako je znázornené v útržku kódu nižšie.

$ .ajax ({

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

typ: 'POST',

údaje: JSON.stringify (autor),

dataType: 'json',

success: function (data) {

výstraha (údaje);

}});

Budete musieť zodpovedajúcim spôsobom upraviť svoju metódu radiča webového API, aby ste mohli analyzovať reťazec dotazu, ako je uvedené nižšie.

[HttpPost]

verejná HttpResponseMessage PostAuthor (autor autor)

{

var data = Request.RequestUri.ParseQueryString ();

string criteria = queryItems ["authenticationToken"];

// Obvyklý kód na ukladanie údajov do databázy

návrat Request.CreateResponse (HttpStatusCode.OK, "Úspech ...");

}

No, ale čo ak máte viac zložitých objektov, ktoré sa majú odovzdať ako parametre metóde radiča webového API? Môžete vytvoriť jeden objekt, ktorý obsahuje viac parametrov. Pozri triedu AuthorRequest uvedenú nižšie.

verejná trieda AuthorRequest

   {

public Autor Autor {get; sada; }

public string Token {get; sada; }

   }

V zásade môžete zabaliť viac parametrov do jednej triedy a použiť túto triedu ako parameter k metóde vášho radiča webového API.

Tu je aktualizovaná metóda radiča webového API.

[HttpPost]

verejná HttpResponseMessage PostAuthor (požiadavka AuthorRequest)

  {

var author = request.Author;

var token = request.Token;

// Obvyklý kód na ukladanie údajov do databázy

návrat Request.CreateResponse (HttpStatusCode.OK, "Úspech ...");

  }

Môžete tiež použiť program JObject na analýzu viacerých hodnôt parametrov z objektu.

[HttpPost]

verejná HttpResponseMessage PostAuthor (JObject jsonData)

{

dynamický json = jsonData;

JObject jauthor = json.Author;

reťazec token = json.Token;

var autor = jauthor.ToObject ();

// Obvyklý kód na ukladanie údajov do databázy

návrat Request.CreateResponse (HttpStatusCode.OK, "Úspech ...");

}

Ďalším spôsobom, ako to vyriešiť, je použitie FormDataCollection. Mimochodom, FormDataCollection je kolekcia párov kľúč / hodnota podobne ako FormCollection v MVC.

[HttpPost]

verejná HttpResponseMessage PostAuthor (formulár FormDataCollection)

        {

var author = form.Get ("Autor");

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

// Obvyklý kód na ukladanie údajov do databázy

návrat Request.CreateResponse (HttpStatusCode.OK, "Úspech ...");

        }

Vďaka rozšíriteľnosti rámca Web API môžete tiež vytvoriť svoje vlastné viazanie parametrov rozšírením triedy HttpParameterBinding, aby ste poskytli podporu pre viazanie viacerých parametrov.

Ako urobiť viac v ASP.NET a ASP.NET Core:

  • Ako používať ukladanie do pamäte cache v ASP.NET Core
  • Ako spracovať chyby v webovom rozhraní API ASP.NET
  • Ako odovzdať viaceré parametre metódam radiča webového API
  • Ako prihlásiť metadáta požiadaviek a odpovedí do webového rozhrania ASP.NET Web API
  • Ako pracovať s HttpModules v ASP.NET
  • Pokročilé spravovanie verzií v webovom rozhraní API ASP.NET Core
  • Ako používať vkladanie závislostí v ASP.NET Core
  • Ako pracovať s reláciami v ASP.NET
  • Ako pracovať s HTTPHandlers v ASP.NET
  • Ako používať IHostedService v ASP.NET Core
  • Ako spotrebovať službu WCF SOAP v ASP.NET Core
  • Ako zlepšiť výkon aplikácií ASP.NET Core
  • Ako konzumovať webové rozhranie API ASP.NET Core pomocou nástroja RestSharp
  • Ako pracovať s prihlásením do ASP.NET Core
  • Ako používať MediatR v ASP.NET Core
  • Ako pracovať so stavom relácie v ASP.NET Core
  • Ako používať Nancy v ASP.NET Core
  • Pochopte väzbu parametrov vo webovom rozhraní API ASP.NET
  • Ako nahrávať súbory v ASP.NET Core MVC
  • Ako implementovať globálne spracovanie výnimiek v webovom rozhraní API ASP.NET Core
  • Ako implementovať kontroly stavu v ASP.NET Core
  • Najlepšie postupy pri ukladaní do pamäte cache v ASP.NET
  • Ako používať zasielanie správ Apache Kafka v .NET
  • Ako povoliť CORS vo vašom webovom rozhraní API
  • Kedy použiť WebClient vs. HttpClient vs. HttpWebRequest
  • Ako pracovať s Redis Cache v .NET
  • Kedy použiť Task.WaitAll vs. Task.WhenAll v .NET
$config[zx-auto] not found$config[zx-overlay] not found