Vraag Global.asax magische functies


Bij het maken van een ASP.NET Mvc-project in Visual Studio, a Global.asax & Global.asax.cs zal gemaakt worden. In dit .cs-bestand vindt u de standaard Application_Start methode.

Mijn vraag is het volgende, hoe wordt deze functie genoemd? omdat het geen override is. Dus mijn gok is dat deze methode naam volgens afspraak is. Hetzelfde geldt voor de Application_Error methode.

Ik wil weten waar deze methoden verslaafd zijn. Omdat ik die methoden schrijf (ze niet overschrijven), kon ik geen documentatie over hen vinden in MSDN. (Ik vond deze pagina, maar het vertelt u alleen dat u moet inhaken op de Error evenement en shows a Application_Error(object sender, EventArgs e) maar niet hoe het evenement en de methode zijn gekoppeld.)

//Magicly called at startup
protected void Application_Start() 
{
    //Omitted
}

//Magicly linked with the Error event
protected void Application_Error(object sender, EventArgs e)
{
    //Omitted
}

21
2018-02-08 13:32


oorsprong


antwoorden:


Het is niet echt magisch ... de ASP.NET-pijplijn brengt dit allemaal samen.

Jij kan zie de documentatie hieromtrent.

In het bijzonder bent u geïnteresseerd in de onderstaande onderdelen:

Een HttpApplication object is toegewezen aan het verzoek.

Die bestaat uit een lijst van gebeurtenissen die zijn afgevuurd en in welke volgorde.

Er zijn links helemaal over die pagina (te veel om hier te bevatten) die naar andere pagina's linken met nog meer informatie.


ASP.NET bindt applicatie-events automatisch aan handlers in de   Global.asax-bestand met de naamgevingsconventie Application_event, such   als Application_BeginRequest. Dit is vergelijkbaar met de manier waarop ASP.NET   paginamethoden worden automatisch gekoppeld aan gebeurtenissen, zoals de pagina's    Page_Load evenement.

Bron: http://msdn.microsoft.com/en-us/library/ms178473.aspx


15
2018-02-08 13:48



ASP.Net maakt het zelf. Hier is de stroom volgens MSDN -

  • De gebruiker vraagt ​​om een ​​toepassingsresource van de webserver.
  • ASP.NET ontvangt het eerste verzoek voor de toepassing.
  • ASP.NET kernobjecten worden gemaakt voor elke aanvraag.
  • Een HttpApplication-object is aan het verzoek toegewezen. In deze stap wordt Global.asax verwerkt en gebeurtenissen automatisch gekoppeld.
  • Het verzoek wordt verwerkt door de Http Application-pipeline. In deze stap worden de HttpApplication Global-evenementen besproken.

Hier is de referentie - ASP.Net Application Life Cycle.

Uit de verwijzing - ASP.NET bindt applicatie-events automatisch aan handlers in het Global.asax-bestand met behulp van de naamgevingsconventie Application_event, zoals Application_BeginRequest.


1
2018-02-08 13:58



Om de 'magie' van het geaccepteerde antwoord te demystificeren, koppelt de ASP.Net-pijplijn zich automatisch aan de HttpApplication evenementen om de methoden met de Application_EventName in de klas. Als je (net als ik) liever ziet dat de evenementen expliciet aan een afhandelaar zijn gebonden, kunnen deze worden opgelegd door dwingende redenen HttpApplication.Init() en Visual Studio genereert de afhandelingsmethode met de juiste handtekening.

public override void Init()
{
  this.BeginRequest += MvcAppliction_BeginRequest;
}

private void MvcApplication_BeginRequest(object sender, EventArgs e)
{
  ...
}

Er is een voorbeeld van deze methode van bindende gebeurtenissen


1
2017-12-12 10:53