Ohjelmointi

Kuinka työskennellä HttpModulesin kanssa ASP.NET: ssä

ASP.NET-sovelluksen pyyntöputkeen voidaan lisätä logiikkaa kahdella tavalla - HttpHandlers ja HttpModules. HttpModule on komponentti, joka on osa ASP.NET-pyyntöjen käsittelyputkea ja jota kutsutaan jokaisessa sovelluksellesi tehdyssä pyynnössä.

Huomaa, että HttpModuleilla voi olla pääsy pyynnön elinkaaritapahtumiin, joten niitä voidaan käyttää myös vastauksen muokkaamiseen. Http-moduuleja käytetään yleensä kytkemään monialaiset huolenaiheet, kuten turvallisuus, kirjaaminen jne., Pyynnön käsittelyputkessa, ja niitä voidaan käyttää myös URL-osoitteiden uudelleenkirjoittamiseen ja jopa mukautettujen otsikkojen luomiseen vastauksessa.

Kuten Microsoftin dokumentaatiossa todetaan, "HTTP-moduuli on kokoonpano, joka kutsutaan jokaiselle sovelluksellesi tehdylle pyynnölle. HTTP-moduuleja kutsutaan osana ASP.NET-pyyntöputkea, ja niillä on pääsy elinkaaritapahtumiin koko pyynnön ajan. HTTP-moduulien avulla voit tutkia saapuvia ja lähteviä pyyntöjä ja toimia pyynnön perusteella. "

Luo mukautettu HttpModule luomalla luokka, joka toteuttaa System.Web.IHttpModule-käyttöliittymän. Luo HttpModule seuraavasti:

  1. Avaa Visual Studio IDE
  2. Napsauta Tiedosto-> Uusi projekti
  3. Luo luokan kirjastoprojekti
  4. Lisää viittaus System.Web-kokoonpanoon tähän projektiin
  5. Luo sitten projektiin luokka, joka toteuttaa IHttpModule-käyttöliittymän
  6. Kirjoita käsittelijä Init-menetelmälle moduulin alustamiseksi ja yhden tai useamman tapahtuman tilaamiseksi
  7. Vaihtoehtoisesti voit ottaa käyttöön Hävitä-menetelmän mukautetussa moduulissasi

Ensi silmäyksellä mukautettu HttpModule näyttää tältä:

public class CustomHttpModule: IHttpModule

   {

public void Hävitä ()

       {

heittää uusi NotImplementedException ();

       }

public void Init (HttpApplication-konteksti)

       {

heittää uusi NotImplementedException ();

       }

   }

Seuraava koodinpätkä näyttää, miten voit tilata tapahtumia mukautetussa HTTP-moduulissasi.

public void Init (HttpApplication-konteksti)

       {

context.BeginRequest + = uusi EventHandler (OnBeginRequest);

context.EndRequest + = uusi EventHandler (OnEndRequest);

context.LogRequest + = uusi EventHandler (OnLogRequest);

       }

Kirjoita nyt koodi OnLogRequest-menetelmälle. Tämä menetelmä on tarkoitettu kirjaamaan polku tai kaikki pyynnöt tekstitiedostoon. Näin OnLogRequest-menetelmän tulisi näyttää:

public void OnLogRequest (objektin lähettäjä, EventArgs e)

       {

HttpContext context = ((HttpApplication) lähettäjä) .Context;

merkkijono filePath = @ "D: \ Log.txt";

käyttäen (StreamWriter streamWriter = uusi StreamWriter (filePath))

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

Seuraava koodiluettelo kuvaa täydellisen mukautetun HTTP-moduulin.

public class CustomModule: IHttpModule

   {

public void Init (HttpApplication-konteksti)

       {

context.BeginRequest + = uusi EventHandler (OnBeginRequest);

context.EndRequest + = uusi EventHandler (OnEndRequest);

context.LogRequest + = uusi EventHandler (OnLogRequest);

       }

public void OnLogRequest (objektin lähettäjä, EventArgs e)

       {

HttpContext context = ((HttpApplication) lähettäjä) .Context;

merkkijono filePath = @ "D: \ Log.txt";

käyttäen (StreamWriter streamWriter = uusi StreamWriter (filePath))

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

public void OnBeginRequest (objektin lähettäjä, EventArgs e)

       {

// Kirjoita mukautettu koodi tähän

       }

public void OnEndRequest (objektin lähettäjä, EventArgs e)

       {

// Kirjoita mukautettu koodi tähän

       }

public void Hävitä ()

       {

// Kirjoita mukautettu koodi tähän hävittääksesi objektit tarvittaessa

       }

   }

Seuraava vaihe on käyttää mukautettua HTTP-moduulia. Voit tehdä tämän luomalla toisen projektin (tällä kertaa ASP.NET-sovellusprojektin). Rakenna ensin ratkaisu ja lisää viite juuri luomallesi mukautetulle HTTP-moduulille.

Seuraavaksi sinun on rekisteröitävä mukautettu HTTP-moduuli web.config-tiedostoon. Seuraava koodinpätkä kuvaa, kuinka mukautettu HTTP-moduuli voidaan rekisteröidä.

Ja tämä on kaikki mitä sinun tarvitsee tehdä, jotta voit käyttää mukautettua HTTP-moduulia.

Kun käytetään synkronista HTTP-moduulia, ketju ei vapautu ennen kuin pyynnön käsittely on valmis. Tästä voi tulla merkittävä suorituskyvyn pullonkaula, kun mukautetun HTTP-moduulin on suoritettava pitkään käynnissä olevat I / O-sidotut toiminnot. Tämän ratkaisemiseksi voit hyödyntää asynkronista ohjelmointia asynkronisen HTTP-moduulin toteuttamiseksi. Tämä varmistaa, että sovelluksesi suorituskyky ei heikkene, kun HTTP-moduulin on käsiteltävä paljon. Asynkroninen ohjelmointi auttaa käytettävissä olevien resurssien käyttöä paremmin.

Asynkronian toteuttamiseksi mukautetussa HTTP-moduulissa haluat hyödyntää EventNETHandlerTaskAsyncHelper-luokkaa, joka on käytettävissä osana .NET Framework 4.5: ta. Seuraava koodinpätkä kuvaa, kuinka voit hyödyntää tätä luokkaa tilataksesi tapahtumia mukautetun HTTP-moduulin Init-menetelmällä. Huomaa, että LogRequest-menetelmän pitäisi palauttaa Task-tyyppinen esiintymä.

public void Init (HttpApplication-konteksti)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = uusi EventHandlerTaskAsyncHelper (LogRequest);

context.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);

       }

Tässä on mukautetun HTTP-moduulin asynkronisen version täydellinen koodiluettelo.

public class CustomModule: IHttpModule

   {

public void Init (HttpApplication-konteksti)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = uusi EventHandlerTaskAsyncHelper (LogRequest);

context.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);

       }

private async Task LogRequest (objektin lähettäjä, EventArgs e)

       {

HttpContext context = ((HttpApplication) lähettäjä) .Context;

merkkijono filePath = @ "D: \ Log.txt";

käyttäen (StreamWriter streamWriter = uusi StreamWriter (filePath, true))

           {

odota streamWriter.WriteLineAsync (context.Request.Path);

           }

       }

   }

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