Programování

Jak předat více parametrů metodám webového kontroleru API

V dřívějším příspěvku zde jsme prozkoumali vazbu parametrů ve webovém rozhraní API. V tomto příspěvku se naučíme předávat více parametrů metodám webového kontroleru API.

Web API poskytuje nezbytné metody akcí pro operace HTTP GET, POST, PUT a DELETE. Obvykle byste předali jeden objekt jako parametr metodám akce PUT a POST. Všimněte si, že webové rozhraní API ve výchozím nastavení nepodporuje předávání více parametrů POST metodám řadiče webového rozhraní API. Ale co kdybyste provedli požadavek POST s více objekty předanými jako parametry metodě webového kontroleru API?

Pochopení problému

Web API vám neumožňuje předat více složitých objektů v podpisu metody metody webového rozhraní API - do metody akce webového rozhraní API můžete odeslat pouze jednu hodnotu. Tato hodnota zase může být dokonce složitým objektem. Je možné předat více hodnot při operaci POST nebo PUT mapováním jednoho parametru na skutečný obsah a zbývajících pomocí řetězců dotazu.

Následující třída řadiče obsahuje metodu POST s názvem Uložit, která přijímá více parametrů.

veřejná třída AuthorsController: ApiController

    {

[HttpPost]

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

        {

// Obvyklý kód

návrat Request.CreateResponse (HttpStatusCode.OK, "úspěch ...");

        }

   }

Nyní předpokládejme, že se pokusíte zavolat metodu řadiče webového API z JQuery, jak je znázorněno níže.

$ .ajax ({

url: 'api / autoři',

typ: 'POST',

data: {Id: 1, FirstName: 'Joydip', LastName: 'Kanjilal', Address: 'Hyderabad'},

dataType: 'json',

success: function (data) {

výstraha (data);

}});

Toto volání bohužel selže, protože tento požadavek nelze zpracovat pomocí webového rozhraní API. Podobně, pokud máte metodu řadiče webového rozhraní API, která přijímá více složitých objektů, nebudete moci tuto metodu vyvolat přímo z klienta přímým způsobem.

[HttpPost]

public HttpResponseMessage PostAuthor (autor, autor, ověřování řetězce)

{

// Obvyklý kód

návrat Request.CreateResponse (HttpStatusCode.OK, "úspěch ...");

}

Parametry můžete předat metodám řadiče webového API pomocí atributů [FromBody] nebo [FromUri]. Atribut [FromBody] lze v seznamu parametrů metody použít pouze jednou. Chcete-li to znovu zopakovat, máte povoleno předat pouze jednu hodnotu (jednoduchý nebo složitý typ) jako parametr metodě řadiče webového API při použití atributu [FromBody]. Pomocí atributu [FromUri] můžete předat libovolný počet parametrů, ale to není v našem případě ideální řešení.

A teď řešení

Nyní, když jsme pochopili, v čem je problém při předávání parametrů metodě webového rozhraní API, pojďme prozkoumat možná řešení. Jedním ze způsobů, jak toho dosáhnout, je předání komplexního objektu jako atributu [FromBody] a parametru řetězce přes Uri, jak je znázorněno v úryvku kódu níže.

$ .ajax ({

url: 'api / autoři? authenticationToken = abcxyz',

typ: 'POST',

data: JSON.stringify (autor),

dataType: 'json',

success: function (data) {

výstraha (data);

}});

Budete muset odpovídajícím způsobem upravit svoji metodu řadiče webového API, abyste mohli analyzovat řetězec dotazu, jak je znázorněno níže.

[HttpPost]

veřejná HttpResponseMessage PostAuthor (autor autor)

{

var data = Request.RequestUri.ParseQueryString ();

string criteria = queryItems ["authenticationToken"];

// Obvyklý kód pro ukládání dat do databáze

návrat Request.CreateResponse (HttpStatusCode.OK, "úspěch ...");

}

No, ale co když máte více složitých objektů, které mají být předány jako parametry metodě webového rozhraní API? Můžete vytvořit jeden objekt, který zabalí více parametrů. Viz třída AuthorRequest uvedená níže.

veřejná třída AuthorRequest

   {

public Autor Autor {get; soubor; }

public string Token {get; soubor; }

   }

V zásadě můžete zabalit více parametrů do jedné třídy a použít tuto třídu jako parametr k vaší metodě webového rozhraní API.

Zde je aktualizovaná metoda řadiče webového rozhraní API.

[HttpPost]

veřejná HttpResponseMessage PostAuthor (žádost AuthorRequest)

  {

var author = request.Author;

var token = request.Token;

// Obvyklý kód pro ukládání dat do databáze

návrat Request.CreateResponse (HttpStatusCode.OK, "úspěch ...");

  }

Můžete také použít JObject k analýze více hodnot parametrů z objektu.

[HttpPost]

veřejná HttpResponseMessage PostAuthor (JObject jsonData)

{

dynamický json = jsonData;

JObject jauthor = json.Author;

řetězec token = json.Token;

var autor = jauthor.ToObject ();

// Obvyklý kód pro ukládání dat do databáze

návrat Request.CreateResponse (HttpStatusCode.OK, "úspěch ...");

}

Dalším způsobem, jak to vyřešit, je použití FormDataCollection. Mimochodem, FormDataCollection je kolekce párů klíč / hodnota podobně jako FormCollection v MVC.

[HttpPost]

veřejná HttpResponseMessage PostAuthor (formulář FormDataCollection)

        {

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

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

// Obvyklý kód pro ukládání dat do databáze

návrat Request.CreateResponse (HttpStatusCode.OK, "úspěch ...");

        }

Díky rozšiřitelnosti rozhraní Web API můžete také vytvořit vlastní vlastní pořadač parametrů rozšířením HttpParameterBinding třídy, aby poskytoval podporu pro vázání více parametrů.

Jak udělat více v ASP.NET a ASP.NET Core:

  • Jak používat ukládání do mezipaměti v paměti ASP.NET Core
  • Jak zpracovat chyby v ASP.NET Web API
  • Jak předat více parametrů metodám webového kontroleru API
  • Jak protokolovat metadata požadavků a odpovědí ve webovém rozhraní API ASP.NET
  • Jak pracovat s HttpModules v ASP.NET
  • Pokročilé správy verzí v ASP.NET Core Web API
  • Jak používat vkládání závislostí v ASP.NET Core
  • Jak pracovat s relacemi v ASP.NET
  • Jak pracovat s HTTPHandlers v ASP.NET
  • Jak používat IHostedService v ASP.NET Core
  • Jak využívat službu WCF SOAP v ASP.NET Core
  • Jak zlepšit výkon aplikací ASP.NET Core
  • Jak konzumovat webové rozhraní API ASP.NET Core pomocí RestSharp
  • Jak pracovat s protokolováním v ASP.NET Core
  • Jak používat MediatR v ASP.NET Core
  • Jak pracovat se stavem relace v ASP.NET Core
  • Jak používat Nancy v ASP.NET Core
  • Vysvětlení vazby parametrů v ASP.NET Web API
  • Jak nahrávat soubory v ASP.NET Core MVC
  • Jak implementovat globální zpracování výjimek ve webovém rozhraní API ASP.NET Core
  • Jak implementovat kontroly stavu v ASP.NET Core
  • Osvědčené postupy při ukládání do mezipaměti v ASP.NET
  • Jak používat zasílání zpráv Apache Kafka v .NET
  • Jak povolit CORS ve vašem webovém rozhraní API
  • Kdy použít WebClient vs. HttpClient vs. HttpWebRequest
  • Jak pracovat s Redis Cache v .NET
  • Kdy použít Task.WaitAll vs. Task.WhenAll v .NET
$config[zx-auto] not found$config[zx-overlay] not found