Det er to måter du kan injisere logikk i forespørselsrørledningen til et ASP.NET-program - HttpHandlers og HttpModules. En HttpModule er en komponent som er en del av ASP.NET-prosesseringsrørledningen og kalles på hver forespørsel som blir gjort til søknaden din.
Merk at HttpModules kan ha tilgang til livssyklushendelsene til en forespørsel, og dermed kan de også brukes til å endre svaret. HttpModules brukes vanligvis til å plugge inn tverrgående bekymringer som sikkerhet, logging osv. I forespørselsrørledningen, og kan også brukes til URL-omskriving og til og med for å lage tilpassede overskrifter i svaret.
Som Microsofts dokumentasjon sier, “En HTTP-modul er en samling som kalles på hver forespørsel som blir gjort til applikasjonen din. HTTP-moduler kalles som en del av ASP.NET-forespørselsrørledningen og har tilgang til livssyklushendelser gjennom hele forespørselen. HTTP-moduler lar deg undersøke innkommende og utgående forespørsler og iverksette tiltak basert på forespørselen. ”
For å lage en tilpasset HttpModule, bør du opprette en klasse som implementerer System.Web.IHttpModule-grensesnittet. Følg disse trinnene for å opprette en HttpModule:
- Åpne Visual Studio IDE
- Klikk på Fil-> Nytt prosjekt
- Lag et klassebibliotekprosjekt
- Legg til referanse til System.Web-samling til dette prosjektet
- Deretter oppretter du en klasse i dette prosjektet som implementerer IHttpModule-grensesnittet
- Skriv en behandler for Init-metoden for å initialisere modulen og abonnere på en eller flere hendelser
- Eventuelt kan du implementere en Dispose-metode i din tilpassede modul
Ved første øyekast ser vår tilpassede HttpModule slik ut:
offentlig klasse CustomHttpModule: IHttpModule{
offentlig tomrom Kast ()
{
kaste nye NotImplementedException ();
}
offentlig ugyldig Init (HttpApplication context)
{
kaste nye NotImplementedException ();
}
}
Følgende kodebit viser hvordan du kan abonnere på hendelser i din tilpassede HTTP-modul.
offentlig ugyldig Init (HttpApplication context){
context.BeginRequest + = new EventHandler (OnBeginRequest);
context.EndRequest + = new EventHandler (OnEndRequest);
context.LogRequest + = ny EventHandler (OnLogRequest);
}
La oss nå skrive koden for OnLogRequest-metoden. Denne metoden er ment å logge banen eller hver forespørsel til en tekstfil. Slik ser OnLogRequest-metoden ut:
offentlig ugyldig OnLogRequest (objektavsender, EventArgs e){
HttpContext context = ((HttpApplication) avsender) .Context;
streng filePath = @ "D: \ Log.txt";
bruker (StreamWriter streamWriter = ny StreamWriter (filePath))
{
streamWriter.WriteLine (context.Request.Path);
}
}
Følgende kodeliste illustrerer den komplette tilpassede HTTP-modulen.
offentlig klasse CustomModule: IHttpModule{
offentlig ugyldig Init (HttpApplication context)
{
context.BeginRequest + = new EventHandler (OnBeginRequest);
context.EndRequest + = new EventHandler (OnEndRequest);
context.LogRequest + = ny EventHandler (OnLogRequest);
}
offentlig ugyldig OnLogRequest (objektavsender, EventArgs e)
{
HttpContext context = ((HttpApplication) avsender) .Context;
streng filePath = @ "D: \ Log.txt";
bruker (StreamWriter streamWriter = ny StreamWriter (filePath))
{
streamWriter.WriteLine (context.Request.Path);
}
}
offentlig ugyldig OnBeginRequest (objektavsender, EventArgs e)
{
// Skriv din tilpassede kode her
}
offentlig ugyldig OnEndRequest (objektavsender, EventArgs e)
{
// Skriv din tilpassede kode her
}
offentlig tomrom Kast ()
{
// Skriv din egendefinerte kode her for å avhende gjenstander om nødvendig
}
}
Neste trinn er å bruke den tilpassede HTTP-modulen. For å gjøre dette, opprett et nytt prosjekt (denne gangen, et ASP.NET applikasjonsprosjekt). Bygg først løsningen og legg til referanse til den tilpassede HTTP-modulen vi nettopp opprettet.
Deretter må du registrere den tilpassede HTTP-modulen i web.config-filen. Følgende kodebit illustrerer hvordan den tilpassede HTTP-modulen kan registreres.
Og det er alt du trenger å gjøre for å bruke din tilpassede HTTP-modul.
Når du bruker en synkron HTTP-modul, blir tråden ikke frigitt før behandlingen av forespørselen er fullført. Dette kan bli en viktig ytelsesflaskehals når den egendefinerte HTTP-modulen din trenger å utføre I / O-bundne operasjoner som kjører lenge. For å løse dette kan du dra nytte av asynkron programmering for å implementere en asynkron HTTP-modul også. Dette vil sikre at ytelsen til applikasjonen din ikke forringes når HTTP-modulen din trenger å behandle mye. Asynkron programmering hjelper til med bedre bruk av tilgjengelige ressurser.
For å implementere asynkroni i den tilpassede HTTP-modulen din, vil du bruke EventHandlerTaskAsyncHelper-klassen som er tilgjengelig som en del av .NET Framework 4.5. Følgende kodebit illustrerer hvordan du kan dra nytte av denne klassen for å abonnere på hendelser i Init-metoden til din tilpassede HTTP-modul. Merk at LogRequest-metoden skal returnere en forekomst av typen Task.
offentlig ugyldig Init (HttpApplication context){
EventHandlerTaskAsyncHelper asyncHelperObject = ny EventHandlerTaskAsyncHelper (LogRequest);
context.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);
}
Her er den komplette kodelisten for den asynkrone versjonen av vår tilpassede HTTP-modul.
offentlig klasse CustomModule: IHttpModule{
offentlig ugyldig Init (HttpApplication context)
{
EventHandlerTaskAsyncHelper asyncHelperObject = ny EventHandlerTaskAsyncHelper (LogRequest);
context.AddOnPostAuthorizeRequestAsync (asyncHelperObject.BeginEventHandler, asyncHelperObject.EndEventHandler);
}
private async Task LogRequest (objektavsender, EventArgs e)
{
HttpContext context = ((HttpApplication) avsender) .Context;
streng filePath = @ "D: \ Log.txt";
bruker (StreamWriter streamWriter = ny StreamWriter (filePath, true))
{
avvente streamWriter.WriteLineAsync (context.Request.Path);
}
}
}
Hvordan gjøre mer i ASP.NET og ASP.NET Core:
- Hvordan bruke hurtigbufring i minnet i ASP.NET Core
- Hvordan håndtere feil i ASP.NET Web API
- Hvordan overføre flere parametere til Web API-kontrollermetoder
- Hvordan logge forespørsels- og svarmetadata i ASP.NET Web API
- Hvordan jobbe med HttpModules i ASP.NET
- Avansert versjonering i ASP.NET Core Web API
- Hvordan bruke avhengighetsinjeksjon i ASP.NET Core
- Hvordan jobbe med økter i ASP.NET
- Hvordan jobbe med HTTPHandlers i ASP.NET
- Hvordan bruke IHostedService i ASP.NET Core
- Hvordan forbruke en WCF SOAP-tjeneste i ASP.NET Core
- Hvordan forbedre ytelsen til ASP.NET Core-applikasjoner
- Slik bruker du et ASP.NET Core Web API ved hjelp av RestSharp
- Hvordan jobbe med innlogging i ASP.NET Core
- Hvordan bruke MediatR i ASP.NET Core
- Hvordan jobbe med økttilstand i ASP.NET Core
- Hvordan bruke Nancy i ASP.NET Core
- Forstå parameterinnbinding i ASP.NET Web API
- Hvordan laste opp filer i ASP.NET Core MVC
- Hvordan implementere global unntaksbehandling i ASP.NET Core Web API
- Hvordan implementere helsesjekker i ASP.NET Core
- Beste fremgangsmåter for hurtigbufring i ASP.NET
- Hvordan bruke Apache Kafka-meldinger i .NET
- Hvordan aktivere CORS på web-API-et
- Når skal du bruke WebClient vs. HttpClient vs. HttpWebRequest
- Hvordan jobbe med Redis Cache i .NET
- Når skal jeg bruke Task.WaitAll vs. Task.WhenAll i .NET