• MvcApplication 中方法的那点事


    最近比较闲,不知道干点啥,想找兼职没有合适的,不找工资又不够花,o(︶︿︶)o 唉! 

    说多了都是泪,入正题吧。

    首先,新建一个MVC4.0项目,建好之后打开Global.asax文件,在MVCApplication类中,只有一个方法Application_Start(),咱们就从它说起。

    Application_Start

    这是初始的代码:

    1  protected void Application_Start()
    2         {
    3             AreaRegistration.RegisterAllAreas();
    4             RouteConfig.RegisterRoutes(RouteTable.Routes);
    5         }

    这个方法是不是很熟悉,这个方法是第一个请求进来之后最先运行、且只运行一次。

    但是请看它还有好几个“兄弟姐妹”:

     1  protected void Application_Start(object sender, EventArgs e)
     2         {
     3             Debug.WriteLine("B: Application_Start(object sender, EventArgs e)");
     4         }
     5 
     6         protected void Application_OnStart()
     7         {
     8             Debug.WriteLine("C: Application_OnStart()");
     9 
    10         }
    11         protected void Application_OnStart(object sender, EventArgs e)
    12         {
    13             Debug.WriteLine("D: Application_OnStart(object sender, EventArgs e)");
    14         }

    如果把他们放在一起会怎样,都会运行?都不运行?还是报错?Or只运行一个?是哪个? 详细答案在这里

    我在这里只说一下结果:这四个方法一起存在的话,只会运行第四个Application_OnStart(object sender,EventArgs e),注释了第四个,会运行第三个,依此类推,优先级最低的是建项目自带的那个。

    另外,我发现一个有趣的现象,在Application_Start方法中添加BeginRequest事件时,直接运行会报错,
    如代码所示:

     1  protected void Application_Start()
     2         {
     3             Debug.WriteLine("A: Application_Start()");
     4             AreaRegistration.RegisterAllAreas();
     5 
     6             WebApiConfig.Register(GlobalConfiguration.Configuration);
     7             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     8             RouteConfig.RegisterRoutes(RouteTable.Routes);
     9             BundleConfig.RegisterBundles(BundleTable.Bundles);
    10             this.BeginRequest += MvcApplication_BeginRequest;
    11             //this.EndRequest += MvcApplication_EndRequest;
    12         }
    13 
    14         private void MvcApplication_BeginRequest(object sender, EventArgs e)
    15         {
    16             Debug.WriteLine("MvcApplication_BeginRequest");
    17         }

    但是,加上 管道事件就没问题了,如代码:

     1 protected void Application_Start()
     2         {
     3             Debug.WriteLine("A: Application_Start()");
     4             AreaRegistration.RegisterAllAreas();
     5 
     6             WebApiConfig.Register(GlobalConfiguration.Configuration);
     7             FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
     8             RouteConfig.RegisterRoutes(RouteTable.Routes);
     9             BundleConfig.RegisterBundles(BundleTable.Bundles);
    10             this.BeginRequest += MvcApplication_BeginRequest;
    11             //this.EndRequest += MvcApplication_EndRequest;
    12         }
    13 
    14         private void MvcApplication_BeginRequest(object sender, EventArgs e)
    15         {
    16             Debug.WriteLine("MvcApplication_BeginRequest");
    17         }
    18         protected void Application_BeginRequest(object sender, EventArgs e)
    19         {
    20             Debug.WriteLine("at application_beginRequest :what's the sender type:{0}", sender.GetType());
    21             Debug.WriteLine("MvcApplication_BeginRequest");
    22         }

    【未完待续】

    不清楚为什么,有知道的麻烦告诉下,另外表述能力很差劲,请多谅解。
  • 相关阅读:
    一种不求交点确定直线与三角形是否相交的方法
    碰撞边界锯齿的平滑方法
    demo的凹凸贴图效果
    MySQL进阶篇触发器
    MySQL进阶篇索引
    Maven的POM文件详解
    Swagger
    MySQL进阶篇存储过程
    SpringBoot基础篇
    MySQL基础篇多表操作
  • 原文地址:https://www.cnblogs.com/flytigger/p/4572126.html
Copyright © 2020-2023  润新知