Ohjelmointi

Kuinka kirjataan pyyntö- ja vastaustiedot, ASP.NET Web API

Kuten todennus, välimuisti ja poikkeusten hallinta, myös kirjaaminen on monialainen huolenaihe - toiminto, joka vaikuttaa koko sovellukseen - joka tulisi keskittää. Kirjaamme usein sovellustiedot, jotka saattavat sisältää menetelmäkutsujen tai tapahtumien, käyttäjän toimien tai jopa virheiden, joita saattaa esiintyä sovelluksen suorituksen aikana. Voit hyödyntää monia kirjauskehyksiä, mutta tässä artikkelissa keskitymme siihen, miten voimme kirjata pyynnöt ja vastaukset ASP.NET Web API: ssa.

Pyyntöjen ja vastausten kirjaaminen Web-sovellusliittymästä on hyödyllistä tulevien ja lähtevien palvelupyyntöjen virheenkorjauksessa, jäljittämisessä ja tarkastuksessa. Kun kaikki pyynnöt ja vastaukset kirjataan yhteen paikkaan, ongelmien havaitseminen kaikista pyynnöistä ja vastauksista on helppoa. Tässä viestissä luomme mukautetun viestinkäsittelijän pyyntöjen ja vastausten seuraamiseksi ja kirjaamiseksi Web-sovellusliittymässä. Viestinkäsittelijää käytetään puhelujen sieppaamiseen ja kaikkien pyyntöjen ja vastausten kirjaamiseen keskitetysti yhteen paikkaan.

Strategiat läpileikkaavien ongelmien lisäämiseksi Web-sovellusliittymään

Web-sovellusliittymässä on useita tapoja lisätä hakkuita ja muita monialaisia ​​huolenaiheita. Yksi tapa on luoda mukautettu ApiController-luokka tai perusluokka kaikille ohjaimillemme ja ohittaa ExecuteAsync-menetelmä. Toinen tapa on käyttää mukautettua toimintosuodatinta. Molemmilla strategioilla on kuitenkin rajoituksensa. Edellisessä tapauksessa meidän olisi varmistettava, että kaikki ohjaimemme laajentavat mukautettua perusohjaimen luokkaa. Jälkimmäisessä meidän on varmistettava, että suodatin asennetaan kaikkiin käyttämiimme ohjaimiin.

Paras strategia on mielestäni käyttää viestinkäsittelijää, koska kirjoitat sen vain kerran ja rekisteröit sen sitten yhteen paikkaan. Lisäksi, koska mukautetun viestin käsittelijää kutsutaan paljon aikaisemmin, ts. Jo ennen HttpControllerDispatcher -ohjelmaa, se soveltuu hyvin monialaisten huolenaiheiden injektointiin. Muuten viestinkäsittelijät ovat luokkia, jotka perivät abstraktin HttpMessageHandler-luokan. Hyödynnämme siis viestinkäsittelijää injektoidaksemme mukautetun loggerimme tähän viestiin.

Jos haluat rakentaa ja suorittaa tässä viestissä kuvatun lähdekoodin, sinulla on oltava Visual Studio käyttöjärjestelmässä. Lisäksi sinun on asennettava NLog. Jos haluat tietää, kuinka NLog asennetaan, määritetään ja käytetään, tutustu tähän artikkeliin NLogista.

Rakennamme asiakaskirjaajaamme Web-sovellusliittymää varten

Luo uusi Web API -projekti Visual Studiossa ja tallenna se haluamallasi nimellä. Hyödynnämme tässä mukautettua delegointikäsittelijää sieppaamaan Web-sovellusliittymän puhelut. Rakennetaan ensinnäkin mukautettu POCO-luokka, joka tallentaa kaikki pyynnöistämme ja vastauksistamme saadut tiedot.

julkisen luokan LogMetadata

    {

public string RequestContentType {get; aseta; }

julkinen merkkijono RequestUri {get; aseta; }

julkinen merkkijono RequestMethod {get; aseta; }

public DateTime? RequestTimestamp {get; aseta; }

public string ResponseContentType {get; aseta; }

public HttpStatusCode ResponseStatusCode {get; aseta; }

public DateTime? ResponseTimestamp {get; aseta; }

    }

Nyt toteutamme mukautetun luokan nimeltä LogHandler. Tämä on lähinnä viestinkäsittelijä, joka laajentaa DelegatingHandler-luokkaa.

julkisen luokan CustomLogHandler: DelegatingHandler

    {

suojattu ohittaa asynkronointi Tehtävä SendAsync (HttpRequestMessage-pyyntö, CancellationToken cancellationToken)

        {

return base.SendAsync (pyyntö, peruutusToken);

        }

    }

Seuraava koodinpätkä näyttää, miten voit luoda pyyntömetadatan. Tätä menetelmää kutsutaan mukautetun viestinkäsittelijämme SendAsync-menetelmästä ja se palauttaa LogMetadata-luokan ilmentymän.

yksityinen LogMetadata BuildRequestMetadata (HttpRequestMessage-pyyntö)

    {

LogMetadata-loki = uusi LogMetadata

        {

RequestMethod = request.Method.Method,

RequestTimestamp = DateTime.Now,

RequestUri = request.RequestUri.ToString ()

        };

paluuloki;

    }

Seuraava asia, joka meidän on tehtävä, on päivittää lokin metadatan ilmentymä vastausobjektin tiedoilla. Näin se voidaan saavuttaa.

yksityinen LogMetadata BuildResponseMetadata (LogMetadata logMetadata, HttpResponseMessage vastaus)

    {

logMetadata.ResponseStatusCode = vastaus.StatusCode;

logMetadata.ResponseTimestamp = DateTime.Now;

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

paluulokiMetadata;

    }

Tässä on mukautetun viestin käsittelijän täydellinen lähdekoodi viitteellesi.

julkisen luokan CustomLogHandler: DelegatingHandler

    {

suojattu ohittaa asynkronointi Tehtävä SendAsync (HttpRequestMessage-pyyntö, CancellationToken cancellationToken)

        {

var logMetadata = BuildRequestMetadata (pyyntö);

var response = odota tukiasemaa.SendAsync (request, cancellationToken);

logMetadata = BuildResponseMetadata (logMetadata, vastaus);

odota SendToLog (logMetadata);

palautusvastaus;

        }

yksityinen LogMetadata BuildRequestMetadata (HttpRequestMessage-pyyntö)

        {

LogMetadata-loki = uusi LogMetadata

            {

RequestMethod = request.Method.Method,

RequestTimestamp = DateTime.Now,

RequestUri = request.RequestUri.ToString ()

            };

paluuloki;

        }

yksityinen LogMetadata BuildResponseMetadata (LogMetadata logMetadata, HttpResponseMessage vastaus)

        {

logMetadata.ResponseStatusCode = vastaus.StatusCode;

logMetadata.ResponseTimestamp = DateTime.Now;

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

paluulokiMetadata;

        }

yksityinen asynkroninen tehtävä SendToLog (LogMetadata logMetadata)

        {

// TODO: Kirjoita koodi tähän tallentaaksesi logMetadata-ilmentymän ennalta määritettyyn lokimyymälään ...

palaa tosi;

        }

    }

Huomaa, että sinun on kirjoitettava tarvittava koodi SendToLog-menetelmässä esitetyn logMetadata-esiintymän tallentamiseksi ennalta määritettyyn lokikohteeseen, eli tiedostoon tai tietokantaan. Haluan käyttää NLogia näiden metatietojen kirjaamiseen. Jälleen kerran voit viitata artikkeliini NLogista nähdäksesi, miten tämä voidaan tehdä.

Rekisteröidään viestinkäsittelijä

Voit rekisteröidä mukautetun viestinkäsittelijän hyödyntämällä Application_Start-tapahtumaa Global.asax.cs-tiedostossa tai WebApiConfig-luokan Rekisteröintimenetelmässä. Seuraava koodinpätkä kuvaa, kuinka voit rekisteröidä käsittelijän käyttämällä WebApiConfig-luokan Rekisteröintimenetelmää.

public static void Register (HttpConfiguration config)

    {

// Kirjoita tavallinen koodi tähän ...

config.MessageHandlers.Add (uusi CustomLogHandler ());

    }

Tässä artikkelissa tutkimme, miten voimme kirjata pyynnöt ja vastaukset Web-sovellusliittymään käyttämällä mukautettua viestinkäsittelijää. Viestinkäsittelijät ovat erinomainen tapa pistää monialaisia ​​huolenaiheita Web-sovellusliittymän putkistoon. Vaikka meillä on muita tapoja lisätä kirjautumista Web-sovellusliittymään, kuten mukautettu ApiController-luokka tai mukautettu toimintosuodatin, mukautetun viestinkäsittelijän käyttö on yksinkertaisempi tapa. Voit mukauttaa tätä toteutusta tarpeidesi mukaan, esimerkiksi lisätäksesi lisää mukautettuja metatietoja.

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
$config[zx-auto] not found$config[zx-overlay] not found