Programavimas

Kaip dirbti su „HttpModules“ ASP.NET

Yra du būdai, kuriais galite įvesti logiką į ASP.NET programos užklausų procesą - „HttpHandlers“ ir „HttpModules“. „HttpModule“ yra komponentas, kuris yra ASP.NET užklausų apdorojimo vamzdyno dalis ir iškviečiamas kiekvienai jūsų programai pateiktai užklausai.

Atkreipkite dėmesį, kad „HttpModules“ gali turėti prieigą prie užklausos gyvavimo ciklo įvykių, taigi jie gali būti naudojami ir atsakymui modifikuoti. „HttpModules“ paprastai naudojami užklausų apdorojimo vamzdyne užpildyti įvairias sritis, pvz., Saugumą, registravimą ir kt., Be to, jie gali būti naudojami perrašant URL ir netgi kuriant pasirinktines antraštes atsakyme.

Kaip teigiama „Microsoft“ dokumentuose, „HTTP modulis yra surinkimas, kuris iškviečiamas pagal kiekvieną jūsų programai pateiktą užklausą. HTTP moduliai yra iškviečiami kaip ASP.NET užklausų dujotiekio dalis ir per visą užklausą turi prieigą prie gyvavimo ciklo įvykių. HTTP moduliai leidžia nagrinėti gaunamas ir siunčiamas užklausas ir imtis veiksmų pagal užklausą. “

Norėdami sukurti pasirinktinį „HttpModule“, turėtumėte sukurti klasę, įdiegiančią „System.Web.IHttpModule“ sąsają. Norėdami sukurti „HttpModule“, atlikite šiuos veiksmus:

  1. Atidarykite „Visual Studio IDE“
  2. Spustelėkite Failas-> Naujas projektas
  3. Sukurkite klasės bibliotekos projektą
  4. Prie šio projekto pridėkite nuorodą į „System.Web“ surinkimą
  5. Tada sukurkite klasę šiame projekte, įgyvendinančią „IHttpModule“ sąsają
  6. Parašykite „Init“ metodo tvarkytuvą, kad inicializuotumėte savo modulį ir užsiprenumeruotumėte vieną ar daugiau įvykių
  7. Pasirinktinai pritaikykite šalinimo metodą savo pasirinktiniame modulyje

Iš pirmo žvilgsnio mūsų pritaikytas „HttpModule“ atrodo taip:

viešoji klasė CustomHttpModule: IHttpModule

   {

public void Dispose ()

       {

mesti naują NotImplementedException ();

       }

public void Init („HttpApplication“ kontekstas)

       {

mesti naują NotImplementedException ();

       }

   }

Šis kodo fragmentas rodo, kaip galite užsiprenumeruoti įvykius savo tinkintame HTTP modulyje.

public void Init („HttpApplication“ kontekstas)

       {

context.BeginRequest + = new EventHandler (OnBeginRequest);

context.EndRequest + = new EventHandler (OnEndRequest);

context.LogRequest + = naujas „EventHandler“ („OnLogRequest“);

       }

Dabar parašykime OnLogRequest metodo kodą. Šis metodas skirtas registruoti kelią ar kiekvieną užklausą į teksto failą. Štai kaip turėtų atrodyti „OnLogRequest“ metodas:

public void „OnLogRequest“ (objektų siuntėjas, „EventArgs e“)

       {

HttpContext context = ((HttpApplication) siuntėjas) .Context;

eilutės failasPath = @ "D: \ Log.txt";

naudojant [StreamWriter streamWriter = new StreamWriter (filePath)]

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

Šis kodų sąrašas iliustruoja visą pasirinktinį HTTP modulį.

viešoji klasė „CustomModule“: IHttpModule

   {

public void Init („HttpApplication“ kontekstas)

       {

context.BeginRequest + = new EventHandler (OnBeginRequest);

context.EndRequest + = naujas „EventHandler“ („OnEndRequest“);

context.LogRequest + = naujas „EventHandler“ („OnLogRequest“);

       }

public void „OnLogRequest“ (objektų siuntėjas, „EventArgs e“)

       {

HttpContext context = ((HttpApplication) siuntėjas) .Context;

eilutės failasPath = @ "D: \ Log.txt";

naudojant [StreamWriter streamWriter = new StreamWriter (filePath)]

           {

streamWriter.WriteLine (context.Request.Path);

           }

       }

public void „OnBeginRequest“ (objektų siuntėjas, „EventArgs e“)

       {

// Čia parašykite savo pasirinktinį kodą

       }

public void „OnEndRequest“ (objektų siuntėjas, „EventArgs e“)

       {

// Čia parašykite savo pasirinktinį kodą

       }

public void Dispose ()

       {

// Čia parašykite savo pasirinktinį kodą, kad prireikus galėtumėte išmesti bet kokius objektus

       }

   }

Kitas žingsnis - naudoti pasirinktinį HTTP modulį. Norėdami tai padaryti, sukurkite kitą projektą (šį kartą - ASP.NET programos projektą). Pirmiausia sukurkite sprendimą ir pridėkite nuorodą į ką tik sukurtą pasirinktinį HTTP modulį.

Tada turėsite užregistruoti pasirinktinį HTTP modulį faile web.config. Šis kodo fragmentas parodo, kaip galima užregistruoti pasirinktinį HTTP modulį.

Ir tai viskas, ką jums reikia padaryti, kad galėtumėte naudoti pasirinktinį HTTP modulį.

Naudojant sinchroninį HTTP modulį, gija nebus išleista, kol nebus baigtas užklausos apdorojimas. Tai gali tapti pagrindiniu našumo trūkumu, kai jūsų pasirinktinis HTTP modulis turi atlikti ilgas I / O susietas operacijas. Norėdami tai išspręsti, galite pasinaudoti asinchroninio programavimo pranašumais ir įdiegti asinchroninį HTTP modulį. Tai užtikrintų, kad jūsų programos našumas nesumažėtų, kai jūsų HTTP modulis turi daug apdoroti. Asinchroninis programavimas padeda geriau naudoti turimus išteklius.

Norėdami įdiegti asinchroniją savo pasirinktiniame HTTP modulyje, norėtumėte pasinaudoti „EventHandlerTaskAsyncHelper“ klase, esančia kaip .NET Framework 4.5 dalis. Šis kodo fragmentas parodo, kaip galite pasinaudoti šia klase prenumeruodami įvykius pagal pasirinktinio HTTP modulio metodą Init. Atminkite, kad metodas „LogRequest“ turėtų grąžinti „Task“ tipo egzempliorių.

public void Init („HttpApplication“ kontekstas)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = new EventHandlerTaskAsyncHelper (LogRequest);

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

       }

Čia yra visas asinchroninės mūsų pasirinktinio HTTP modulio versijos kodų sąrašas.

viešoji klasė „CustomModule“: IHttpModule

   {

public void Init („HttpApplication“ kontekstas)

       {

EventHandlerTaskAsyncHelper asyncHelperObject = naujas EventHandlerTaskAsyncHelper (LogRequest);

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

       }

privatus asinchroninis uždavinys „LogRequest“ (objektų siuntėjas, „EventArgs e“)

       {

HttpContext context = ((HttpApplication) siuntėjas) .Context;

eilutės failasPath = @ "D: \ Log.txt";

naudojant (StreamWriter streamWriter = naujas StreamWriter (filePath, true))

           {

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

           }

       }

   }

Kaip padaryti daugiau naudojant ASP.NET ir ASP.NET Core:

  • Kaip naudoti atminties talpyklą ASP.NET Core
  • Kaip tvarkyti klaidas ASP.NET žiniatinklio API
  • Kaip perduoti kelis parametrus žiniatinklio API valdiklio metodams
  • Kaip registruoti užklausos ir atsakymo metaduomenis ASP.NET žiniatinklio API
  • Kaip dirbti su „HttpModules“ ASP.NET
  • Išplėstinė ASP.NET „Core Web API“ versijų versija
  • Kaip naudoti priklausomybės injekciją ASP.NET Core
  • Kaip dirbti su sesijomis ASP.NET
  • Kaip dirbti su HTTPHandleriais sistemoje ASP.NET
  • Kaip naudoti „IHostedService“ ASP.NET Core
  • Kaip vartoti WCF SOAP paslaugą ASP.NET Core
  • Kaip pagerinti ASP.NET Core programų veikimą
  • Kaip suvartoti ASP.NET Core Web API naudojant „RestSharp“
  • Kaip dirbti su registravimu ASP.NET Core
  • Kaip naudoti „MediatR“ ASP.NET Core
  • Kaip dirbti su seanso būsena ASP.NET Core
  • Kaip naudoti „Nancy“ ASP.NET Core
  • Supraskite parametrų susiejimą ASP.NET žiniatinklio API
  • Kaip įkelti failus į ASP.NET Core MVC
  • Kaip įdiegti visuotinį išimčių tvarkymą ASP.NET Core Web API
  • Kaip atlikti sveikatos patikrinimus ASP.NET Core
  • Geriausia ASP.NET talpyklos talpinimo praktika
  • Kaip naudoti „Apache Kafka“ pranešimus .NET
  • Kaip įgalinti CORS savo žiniatinklio API
  • Kada naudoti „WebClient“, palyginti su „HttpClient“ ir „HttpWebRequest“
  • Kaip dirbti su „Redis Cache“ .NET
  • Kada .NET naudoti „Task.WaitAll“ ir „Task.WhenAll“