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:
- Avaa Visual Studio IDE
- Napsauta Tiedosto-> Uusi projekti
- Luo luokan kirjastoprojekti
- Lisää viittaus System.Web-kokoonpanoon tähän projektiin
- Luo sitten projektiin luokka, joka toteuttaa IHttpModule-käyttöliittymän
- Kirjoita käsittelijä Init-menetelmälle moduulin alustamiseksi ja yhden tai useamman tapahtuman tilaamiseksi
- 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