Programmēšana

Kā strādāt ar HttpModules ASP.NET

Ir divi veidi, kā jūs varat ievadīt loģiku ASP.NET lietojumprogrammas pieprasījumu cauruļvadā - HttpHandlers un HttpModules. HttpModule ir komponents, kas ir daļa no ASP.NET pieprasījumu apstrādes cauruļvada un tiek izsaukts pēc katra pieprasījuma, kas tiek veikts jūsu lietojumprogrammai.

Ņemiet vērā, ka HttpModules var būt piekļuve pieprasījuma dzīves cikla notikumiem, un tādējādi tos var izmantot arī, lai modificētu atbildi. HttpModules parasti izmanto, lai pieprasījumu apstrādes cauruļvadā pieslēgtu tādas transversālas problēmas kā drošība, mežizstrāde utt., Un tos var izmantot arī URL pārrakstīšanai un pat pielāgotu galvenju izveidošanai atbildē.

Kā norādīts Microsoft dokumentācijā, “HTTP modulis ir montāža, kas tiek izsaukta pēc katra pieprasījuma, kas tiek veikts jūsu lietojumprogrammai. HTTP moduļi tiek izsaukti kā daļa no ASP.NET pieprasījumu cauruļvada, un visā pieprasījumā tiem ir piekļuve dzīves cikla notikumiem. HTTP moduļi ļauj pārbaudīt ienākošos un izejošos pieprasījumus un rīkoties, pamatojoties uz pieprasījumu. ”

Lai izveidotu pielāgotu HttpModule, jums jāizveido klase, kas ievieš saskarni System.Web.IHttpModule. Lai izveidotu HttpModule, rīkojieties šādi:

  1. Atveriet Visual Studio IDE
  2. Noklikšķiniet uz Fails-> Jauns projekts
  3. Izveidojiet klases bibliotēkas projektu
  4. Pievienojiet atsauci uz System.Web montāžu šim projektam
  5. Pēc tam izveidojiet klasi šajā projektā, kas ievieš saskarni IHttpModule
  6. Uzrakstiet apstrādātāju Init metodei, lai inicializētu moduli un abonētu vienu vai vairākus notikumus
  7. Varat arī pielāgotajā modulī ieviest iznīcināšanas metodi

No pirmā acu uzmetiena mūsu pielāgotais HttpModule izskatās šādi:

publiskā klase CustomHttpModule: IHttpModule

   {

public void Iznīcināt ()

       {

mest jaunu NotImplementedException ();

       }

public void Init (HttpApplication konteksts)

       {

mest jaunu NotImplementedException ();

       }

   }

Šis koda fragments parāda, kā jūs varat abonēt pasākumus savā pielāgotajā HTTP modulī.

public void Init (HttpApplication konteksts)

       {

context.BeginRequest + = new EventHandler (OnBeginRequest);

context.EndRequest + = jauns EventHandler (OnEndRequest);

context.LogRequest + = jauns EventHandler (OnLogRequest);

       }

Tagad uzrakstīsim metodes OnLogRequest kodu. Šī metode ir paredzēta, lai reģistrētu ceļu vai visus pieprasījumus uz teksta failu. Lūk, kā jāizskatās OnLogRequest metodei:

public void OnLogRequest (objektu sūtītājs, EventArgs e)

       {

HttpContext context = ((HttpApplication) sūtītājs) .Context;

virknes failsPath = @ "D: \ Log.txt";

izmantojot (StreamWriter streamWriter = jauns StreamWriter (filePath))

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

Šis kodu saraksts ilustrē visu pielāgoto HTTP moduli.

publiskā klase CustomModule: IHttpModule

   {

public void Init (HttpApplication konteksts)

       {

context.BeginRequest + = new EventHandler (OnBeginRequest);

context.EndRequest + = jauns EventHandler (OnEndRequest);

context.LogRequest + = jauns EventHandler (OnLogRequest);

       }

public void OnLogRequest (objektu sūtītājs, EventArgs e)

       {

HttpContext context = ((HttpApplication) sūtītājs) .Context;

virknes failsPath = @ "D: \ Log.txt";

izmantojot (StreamWriter streamWriter = jauns StreamWriter (filePath))

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

public void OnBeginRequest (objektu sūtītājs, EventArgs e)

       {

// Uzrakstiet savu pielāgoto kodu šeit

       }

public void OnEndRequest (objektu sūtītājs, EventArgs e)

       {

// Uzrakstiet savu pielāgoto kodu šeit

       }

public void Iznīcināt ()

       {

// Šeit ierakstiet savu pielāgoto kodu, lai vajadzības gadījumā iznīcinātu objektus

       }

   }

Nākamais solis ir pielāgotā HTTP moduļa izmantošana. Lai to izdarītu, izveidojiet citu projektu (šoreiz ASP.NET lietojumprogrammas projektu). Vispirms izveidojiet risinājumu un pievienojiet atsauci uz tikko izveidoto pielāgoto HTTP moduli.

Pēc tam jums būs jāreģistrē pielāgotais HTTP modulis failā web.config. Šis koda fragments parāda, kā var reģistrēt pielāgoto HTTP moduli.

Tas ir viss, kas jums jādara, lai izmantotu pielāgoto HTTP moduli.

Izmantojot sinhrono HTTP moduli, pavediens netiks izlaists, kamēr nebūs pabeigta pieprasījumu apstrāde. Tas var kļūt par ievērojamu veiktspējas vājo vietu, kad pielāgotajam HTTP modulim jāveic ilgstošas ​​I / O saistītās darbības. Lai to atrisinātu, varat izmantot asinhronās programmēšanas priekšrocības, lai ieviestu arī asinhrono HTTP moduli. Tas nodrošinātu, ka jūsu lietojumprogrammas veiktspēja nepasliktinās, kad HTTP modulim ir jāveic daudz apstrādes. Asinhronā programmēšana palīdz labāk izmantot pieejamos resursus.

Lai ieviestu asinhroniju pielāgotajā HTTP modulī, vēlaties izmantot klasi EventHandlerTaskAsyncHelper, kas pieejama kā daļa no .NET Framework 4.5. Šis koda fragments parāda, kā jūs varat izmantot šīs klases priekšrocības, lai abonētu notikumus pielāgotā HTTP moduļa metodē Init. Ņemiet vērā, ka metodei LogRequest jāatgriež uzdevuma tipa eksemplārs.

public void Init (HttpApplication konteksts)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = new EventHandlerTaskAsyncHelper (LogRequest);

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

       }

Šeit ir pilns mūsu pielāgotā HTTP moduļa asinhronās versijas kodu saraksts.

publiskā klase CustomModule: IHttpModule

   {

public void Init (HttpApplication konteksts)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = new EventHandlerTaskAsyncHelper (LogRequest);

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

       }

private async Task LogRequest (objektu sūtītājs, EventArgs e)

       {

HttpContext context = ((HttpApplication) sūtītājs) .Context;

virknes failsPath = @ "D: \ Log.txt";

izmantojot (StreamWriter streamWriter = new StreamWriter (filePath, true))

           {

gaidīt streamWriter.WriteLineAsync (context.Request.Path);

           }

       }

   }

Kā darīt vairāk programmās ASP.NET un ASP.NET Core:

  • Kā izmantot atmiņas kešatmiņu ASP.NET Core
  • Kā rīkoties ar kļūdām ASP.NET Web API
  • Kā pārsūtīt vairākus parametrus Web API kontroliera metodēm
  • Kā reģistrēt pieprasījuma un atbildes metadatus ASP.NET Web API
  • Kā strādāt ar HttpModules ASP.NET
  • Uzlabota versiju veidošana ASP.NET Core Web API
  • Kā izmantot atkarības injekciju ASP.NET Core
  • Kā strādāt ar sesijām ASP.NET
  • Kā strādāt ar HTTPHandleriem ASP.NET
  • Kā izmantot IHostedService ASP.NET Core
  • Kā patērēt WCF SOAP pakalpojumu ASP.NET Core
  • Kā uzlabot ASP.NET Core lietojumprogrammu veiktspēju
  • Kā patērēt ASP.NET Core Web API, izmantojot RestSharp
  • Kā strādāt ar reģistrēšanos ASP.NET Core
  • Kā izmantot MediatR ASP.NET Core
  • Kā strādāt ar sesijas stāvokli ASP.NET Core
  • Kā Nancy izmantot ASP.NET Core
  • Izprotiet parametru saistīšanu ASP.NET Web API
  • Kā augšupielādēt failus ASP.NET Core MVC
  • Kā ieviest globālo izņēmumu apstrādi ASP.NET Core Web API
  • Kā ieviest veselības pārbaudes ASP.NET Core
  • Labākā prakse kešatmiņā ASP.NET
  • Kā izmantot Apache Kafka ziņojumapmaiņu .NET
  • Kā iespējot CORS savā tīmekļa API
  • Kad lietot WebClient pret HttpClient pret HttpWebRequest
  • Kā strādāt ar Redis kešatmiņu .NET
  • Kad .NET izmantot Task.WaitAll pret Task.WhenAll
$config[zx-auto] not found$config[zx-overlay] not found