Programmering

Sådan arbejder du med HttpModules i ASP.NET

Der er to måder, hvorpå du kan indsprøjte logik i anmodningens pipeline for et ASP.NET-program - HttpHandlers og HttpModules. En HttpModule er en komponent, der er en del af ASP.NET-behandlingsrørledningen og kaldes til hver anmodning, der sendes til din applikation.

Bemærk, at HttpModules kan have adgang til livscyklusbegivenhederne i en anmodning, og de kan derfor også bruges til at ændre svaret. HttpModules bruges normalt til at tilslutte tværgående bekymringer som sikkerhed, logning osv. I anmodningen om behandlingsrørledning og kan også bruges til URL-omskrivning og endda til at oprette brugerdefinerede overskrifter i svaret.

Som Microsofts dokumentation siger, “Et HTTP-modul er en samling, der kaldes på hver anmodning, der fremsættes til din applikation. HTTP-moduler kaldes som en del af ASP.NET-anmodningspipelinen og har adgang til livscyklusbegivenheder i hele anmodningen. HTTP-moduler giver dig mulighed for at undersøge indgående og udgående anmodninger og tage handling baseret på anmodningen. ”

For at oprette en brugerdefineret HttpModule skal du oprette en klasse, der implementerer System.Web.IHttpModule-grænsefladen. Følg disse trin for at oprette en HttpModule:

  1. Åbn Visual Studio IDE
  2. Klik på Fil-> Nyt projekt
  3. Opret et klassebiblioteksprojekt
  4. Føj henvisning til System.Web-samling til dette projekt
  5. Opret derefter en klasse inde i dette projekt, der implementerer IHttpModule-grænsefladen
  6. Skriv en handler til Init-metoden for at initialisere dit modul og abonnere på en eller flere begivenheder
  7. Eventuelt implementerer du en bortskaffelsesmetode i dit tilpassede modul

Ved første øjekast ser vores brugerdefinerede HttpModule sådan ud:

offentlig klasse CustomHttpModule: IHttpModule

   {

offentlig tomrum Bortskaff ()

       {

smid ny NotImplementedException ();

       }

offentlig ugyldig Init (HttpApplication context)

       {

smid ny NotImplementedException ();

       }

   }

Følgende kodestykke viser, hvordan du kan abonnere på begivenheder i dit tilpassede HTTP-modul.

offentlig ugyldig Init (HttpApplication context)

       {

context.BeginRequest + = ny EventHandler (OnBeginRequest);

context.EndRequest + = ny EventHandler (OnEndRequest);

context.LogRequest + = ny EventHandler (OnLogRequest);

       }

Lad os nu skrive koden til OnLogRequest-metoden. Denne metode er beregnet til at logge stien eller enhver anmodning til en tekstfil. Sådan ser OnLogRequest-metoden ud:

offentlig ugyldig OnLogRequest (objektafsender, EventArgs e)

       {

HttpContext context = ((HttpApplication) sender) .Context;

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

ved hjælp af (StreamWriter streamWriter = ny StreamWriter (filePath))

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

Følgende kodeliste illustrerer det komplette brugerdefinerede HTTP-modul.

offentlig klasse CustomModule: IHttpModule

   {

offentlig ugyldig Init (HttpApplication context)

       {

context.BeginRequest + = ny EventHandler (OnBeginRequest);

context.EndRequest + = ny EventHandler (OnEndRequest);

context.LogRequest + = ny EventHandler (OnLogRequest);

       }

offentlig ugyldighed OnLogRequest (objektafsender, EventArgs e)

       {

HttpContext context = ((HttpApplication) sender) .Context;

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

ved hjælp af (StreamWriter streamWriter = ny StreamWriter (filePath))

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

offentlig ugyldighed OnBeginRequest (objektafsender, EventArgs e)

       {

// Skriv din brugerdefinerede kode her

       }

offentlig ugyldighed OnEndRequest (objektafsender, EventArgs e)

       {

// Skriv din brugerdefinerede kode her

       }

offentlig tomrum Bortskaff ()

       {

// Skriv din brugerdefinerede kode her for at bortskaffe objekter, hvis det er nødvendigt

       }

   }

Det næste trin er at bruge det brugerdefinerede HTTP-modul. For at gøre dette skal du oprette et andet projekt (denne gang et ASP.NET-applikationsprojekt). Bygg først løsningen, og tilføj reference til det brugerdefinerede HTTP-modul, vi lige har oprettet.

Derefter skal du registrere det brugerdefinerede HTTP-modul i web.config-filen. Følgende kodestykke illustrerer, hvordan det brugerdefinerede HTTP-modul kan registreres.

Og det er alt hvad du skal gøre for at bruge dit brugerdefinerede HTTP-modul.

Når du bruger et synkron HTTP-modul, frigives tråden ikke, før anmodningens behandling er afsluttet. Dette kan blive en stor præstationsflaskehals, når dit brugerdefinerede HTTP-modul skal udføre I / O-bundne operationer, der kører langvarigt. For at løse dette kan du drage fordel af asynkron programmering til også at implementere et asynkront HTTP-modul. Dette vil sikre, at ydeevnen af ​​din applikation ikke forringes, når dit HTTP-modul skal udføre meget behandling. Asynkron programmering hjælper med bedre anvendelse af tilgængelige ressourcer.

For at implementere asynkroni i dit brugerdefinerede HTTP-modul, vil du ønske at udnytte klassen EventHandlerTaskAsyncHelper, der er tilgængelig som en del af .NET Framework 4.5. Følgende kodestykke illustrerer, hvordan du kan udnytte denne klasse til at abonnere på begivenheder i Init-metoden i dit tilpassede HTTP-modul. Bemærk, at LogRequest-metoden skal returnere en forekomst af typen Task.

offentlig ugyldig Init (HttpApplication context)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = ny EventHandlerTaskAsyncHelper (LogRequest);

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

       }

Her er den komplette kodeliste over den asynkrone version af vores brugerdefinerede HTTP-modul.

offentlig klasse CustomModule: IHttpModule

   {

offentlig ugyldig Init (HttpApplication context)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = ny EventHandlerTaskAsyncHelper (LogRequest);

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

       }

privat async Task LogRequest (objektafsender, EventArgs e)

       {

HttpContext context = ((HttpApplication) sender) .Context;

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

ved hjælp af (StreamWriter streamWriter = ny StreamWriter (filePath, sand))

           {

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

           }

       }

   }

Sådan gør du mere i ASP.NET og ASP.NET Core:

  • Sådan bruges cache i hukommelsen i ASP.NET Core
  • Sådan håndteres fejl i ASP.NET Web API
  • Sådan overføres flere parametre til Web API-controller-metoder
  • Sådan logges anmodnings- og svarmetadata i ASP.NET Web API
  • Sådan arbejder du med HttpModules i ASP.NET
  • Avanceret versionering i ASP.NET Core Web API
  • Sådan bruges afhængighedsinjektion i ASP.NET Core
  • Sådan arbejder du med sessioner i ASP.NET
  • Sådan arbejder du med HTTPHandlers i ASP.NET
  • Sådan bruges IHostedService i ASP.NET Core
  • Sådan forbruges en WCF SOAP-tjeneste i ASP.NET Core
  • Sådan forbedres ydeevnen for ASP.NET Core-applikationer
  • Sådan forbruges en ASP.NET Core Web API ved hjælp af RestSharp
  • Sådan arbejder du med logning i ASP.NET Core
  • Sådan bruges MediatR i ASP.NET Core
  • Sådan arbejder du med sessionstilstand i ASP.NET Core
  • Sådan bruges Nancy i ASP.NET Core
  • Forstå parameterbinding i ASP.NET Web API
  • Sådan uploades filer i ASP.NET Core MVC
  • Sådan implementeres global undtagelseshåndtering i ASP.NET Core Web API
  • Sådan implementeres sundhedstjek i ASP.NET Core
  • Bedste fremgangsmåder inden caching i ASP.NET
  • Sådan bruges Apache Kafka-meddelelser i .NET
  • Sådan aktiveres CORS på din web-API
  • Hvornår skal man bruge WebClient vs. HttpClient vs. HttpWebRequest
  • Sådan arbejder du med Redis Cache i .NET
  • Hvornår skal man bruge Task.WaitAll vs. Task.WhenAll i .NET
$config[zx-auto] not found$config[zx-overlay] not found