Programovanie

Ako prihlásiť metadáta požiadaviek a odpovedí do webového rozhrania ASP.NET Web API

Rovnako ako overovanie, ukladanie do vyrovnávacej pamäte a správa výnimiek je aj prihlásenie dôležitým prierezom - funkciou, ktorá ovplyvňuje celú aplikáciu -, ktorá by mala byť centralizovaná. Často zaznamenávame údaje aplikácií, ktoré môžu obsahovať postupnosť volaní alebo udalostí metód, akcií používateľov alebo dokonca chýb, ktoré sa môžu vyskytnúť pri spustení aplikácie. Existuje mnoho rámcov na protokolovanie, ktoré by ste mohli využiť, ale v tomto článku sa zameriame na to, ako môžeme protokolovať požiadavky a odpovede vo webovom rozhraní API ASP.NET.

Protokolovanie požiadaviek a odpovedí vo webovom rozhraní API je užitočné pri ladení, sledovaní a kontrole prichádzajúcich a odchádzajúcich servisných hovorov. Zaznamenaním všetkých požiadaviek a odpovedí na jedno miesto je detekcia problémov vo všetkých požiadavkách a odpovediach ľahká. V tomto príspevku vytvoríme vlastný obslužný program správ na sledovanie a zaznamenávanie požiadaviek a odpovedí do webového rozhrania API. Obsluha správ sa použije na odpočúvanie hovorov a centrálne zaznamenávanie všetkých požiadaviek a odpovedí na jednom mieste.

Stratégie na vloženie prierezových obáv do webového rozhrania API

Existuje niekoľko spôsobov, ako vložiť problémy s protokolovaním a inými prierezmi do webového rozhrania API. Jedným zo spôsobov je vytvorenie vlastnej triedy ApiController alebo základnej triedy pre všetky naše radiče a potom prepísanie metódy ExecuteAsync. Ďalším spôsobom je použitie vlastného filtra akcií. Obe tieto stratégie však majú svoje obmedzenia. V prvom prípade by sme museli zabezpečiť, aby všetky naše radiče rozšírili triedu vlastných základných radičov. V druhom prípade by sme museli zabezpečiť, aby sa filter použil na všetky radiče, ktoré používame.

Najlepšia stratégia je podľa môjho názoru použiť obslužný program správ, pretože ho napíšete iba raz a potom zaregistrujete na jednom mieste. Pretože sa obslužná rutina vlastných správ bude volať oveľa skôr, tj. Ešte pred HttpControllerDispatcher, je vhodná na vloženie prierezových obáv. Mimochodom, obslužné rutiny správ sú triedy, ktoré dedia abstraktnú triedu HttpMessageHandler. Preto v tomto príspevku využijeme výhodu obsluhy správ na vloženie nášho vlastného záznamníka.

Ak chcete zostaviť a spustiť zdrojový kód ilustrovaný v tomto príspevku, mali by ste mať vo svojom systéme nainštalované a spustené Visual Studio. Mali by ste mať nainštalovaný aj NLog. Ak chcete vedieť, ako nainštalovať, nakonfigurovať a používať NLog, pozrite si môj článok o NLogu tu.

Budujeme náš záznamník zákazníkov pre webové API

Vytvorte nový projekt webového API v Visual Studio a uložte ho s požadovaným menom. Budeme tu využívať vlastnú delegujúcu obslužnú rutinu na zachytávanie hovorov na webové API. Najskôr si vytvorme vlastnú triedu POCO, ktorá bude ukladať všetky informácie z našich požiadaviek a odpovedí.

verejná trieda LogMetadata

    {

verejný reťazec RequestContentType {get; sada; }

verejný reťazec RequestUri {get; sada; }

verejný reťazec RequestMethod {get; sada; }

verejné DateTime? RequestTimestamp {get; sada; }

verejny retazec ResponseContentType {get; sada; }

public HttpStatusCode ResponseStatusCode {get; sada; }

verejné DateTime? ResponseTimestamp {get; sada; }

    }

Teraz implementujeme vlastnú triedu s názvom LogHandler. Toto je v podstate obslužná rutina správ, ktorá rozširuje triedu DelegatingHandler.

verejná trieda CustomLogHandler: DelegatingHandler

    {

chránené prepísanie asynchrónnej úlohy SendAsync (požiadavka HttpRequestMessage, CancellationToken CancelToken)

        {

návratová základňa.SendAsync (požiadavka, stornoToken);

        }

    }

Nasledujúci úryvok kódu ukazuje, ako môžete vytvoriť metadáta žiadosti. Táto metóda sa bude volať z metódy SendAsync nášho vlastného spracovateľa správ a vráti inštanciu triedy LogMetadata.

súkromná LogMetadata BuildRequestMetadata (požiadavka HttpRequestMessage)

    {

LogMetadata log = nové LogMetadata

        {

RequestMethod = request.Method.Method,

RequestTimestamp = DateTime.Now,

RequestUri = request.RequestUri.ToString ()

        };

návratový denník;

    }

Ďalšia vec, ktorú musíme urobiť, je aktualizovať inštanciu metaúdajov protokolu o informácie z objektu odpovede. Toto je možné dosiahnuť týmto spôsobom.

súkromná LogMetadata BuildResponseMetadata (LogMetadata logMetadata, odpoveď HttpResponseMessage)

    {

logMetadata.ResponseStatusCode = response.StatusCode;

logMetadata.ResponseTimestamp = DateTime.Now;

logMetadata.ResponseContentType = response.Content.Headers.ContentType.MediaType;

návrat logMetadata;

    }

Tu je kompletný zdrojový kód prispôsobenej správy správ pre vašu potrebu.

verejná trieda CustomLogHandler: DelegatingHandler

    {

chránené prepísanie asynchrónnej úlohy SendAsync (požiadavka HttpRequestMessage, CancellationToken CancelToken)

        {

var logMetadata = BuildRequestMetadata (požiadavka);

var response = await base.SendAsync (request, CancelToken);

logMetadata = BuildResponseMetadata (logMetadata, odpoveď);

čaká SendToLog (logMetadata);

spätná odozva;

        }

súkromná LogMetadata BuildRequestMetadata (požiadavka HttpRequestMessage)

        {

LogMetadata log = nové LogMetadata

            {

RequestMethod = request.Method.Method,

RequestTimestamp = DateTime.Now,

RequestUri = request.RequestUri.ToString ()

            };

návratový denník;

        }

súkromná LogMetadata BuildResponseMetadata (LogMetadata logMetadata, odpoveď HttpResponseMessage)

        {

logMetadata.ResponseStatusCode = response.StatusCode;

logMetadata.ResponseTimestamp = DateTime.Now;

logMetadata.ResponseContentType = response.Content.Headers.ContentType.MediaType;

návrat logMetadata;

        }

súkromná asynchrónna úloha SendToLog (LogMetadata logMetadata)

        {

// TODO: Sem napíšte kód na uloženie inštancie logMetadata do vopred nakonfigurovaného úložiska protokolov ...

návrat pravdivý;

        }

    }

Upozorňujeme, že je potrebné napísať potrebný kód na uloženie inštancie logMetadata zobrazenej v metóde SendToLog do vopred nakonfigurovaného cieľa protokolu, t. J. Do súboru alebo databázy. Na prihlásenie týchto metadát radšej používam program NLog. Opäť môžete odkázať na môj článok o NLogu, aby ste zistili, ako sa to dá urobiť.

Registruje sa obsluha správy

Ak chcete zaregistrovať vlastný obslužný program správ, môžete využiť výhodu udalosti Application_Start v súbore Global.asax.cs alebo metódu Register triedy WebApiConfig. Nasledujúci úryvok kódu ilustruje, ako môžete zaregistrovať obslužnú rutinu pomocou metódy Register triedy WebApiConfig.

verejný statický neplatný register (konfigurácia HttpConfiguration)

    {

// Sem napíš obvyklý kód ...

config.MessageHandlers.Add (nový CustomLogHandler ());

    }

V tomto článku sme skúmali, ako môžeme protokolovať požiadavky a odpovede vo webovom rozhraní API pomocou vlastného obslužného programu správ. Obslužné rutiny správ sú vynikajúcim spôsobom, ako vložiť prierezové obavy do potrubia webového API. Aj keď máme ďalšie spôsoby, ako vložiť prihlásenie do webového rozhrania API, ako je napríklad vlastná trieda ApiController alebo vlastný filter akcií, použitie vlastného ovládača správ je jednoduchší prístup. Túto implementáciu môžete doladiť na základe svojich požiadaviek, napríklad pridať ďalšie vlastné metadáta.

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