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         }

【未完待续】

不清楚为什么,有知道的麻烦告诉下,另外表述能力很差劲,请多谅解。
时间: 2024-10-29 19:07:35

MvcApplication 中方法的那点事的相关文章

android中setOnClickListener的那点事

最近在写代码中,发现在xml文件设置了android:clickable="false",之后这个View还是可点的. 后来发现,是代码中对View设置了监听事件(setOnClickListener),把代码屏蔽了,clickable属性生效. 后来查看了一下源码(setOnClickListener),代码如下,发现其中的if语句,如果这个View clickable不可点,该方法会把这个View设为可点,这也就是为什么我的问题会出现的原因了 public void setOnCl

java中方法调用

JAVA中方法的调用[基础] 一.调用本类中的方法 方法一.被调用方法声明为static ,可以在其他方法中直接调用.示例代码如下: public class HelloWord { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str="HelloWord!"; int a=0; int b=a+1; int result=

C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法

C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的主要方法和属性如下:  GetPixel与SetPixel方法:获取或设置一个图像的指定像素的颜色. PixelFormat属性:返回图像的像素格式. Height和Width:返回图像的高度和宽度. LockBits与UnLockBits方法:分别锁定和解锁系统内存中的位图像素. LockBits

C#中方法的参数的四种类型

C#中方法的参数有四种类型: 1. 值参数类型  (不加任何修饰符,是默认的类型) 2. 引用型参数  (以ref 修饰符声明) 3. 输出型参数  (以out 修饰符声明) 4. 数组型参数  (以params 修饰符声明) =================================================== 1. 值传递: 值类型是方法默认的参数类型,采用的是值拷贝的方式.也就是说,如果使用的是值类型,则可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值.使用

上网站外链是我们在SEO中必备的一件事

<p> <br>上网站外链是我们在SEO中必备的一件事,具体该怎么样操作才能提高外链的质量,让外链阐扬最年夜的浸染,有用地晋升网站权重.<br>我们凡是的外链有哪几种,简单介绍一下:<br>1.论坛的外链:论坛的外链是我们站长做的最多的是公认的获取外链最快的路子.一般情形下,站长都是在论他中发帖回帖,初级的SEO人员就是在论坛中灌水,拼命地顶贴,甚至有些人他们做的加倍的过度,操作顶贴工具,进行大量的顶贴,导致良多的账号被打点封失踪.外链大量的丢掉,导致网站的

C#反射调用程序集类中方法

建立类 class OperatorClass { /// <summary> /// 加法 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> /// public static int Add(int x, int y) { r

java中方法的重载与重写的区别

JAVA中方法的重载与重写 1)  方法的的参数上看:重载后的方法与源方法在参数的类型以参数列表的顺序上会发生改变,而重写后的方法在参数的数据类型与参数列表的顺序不会发生改变 2)原方法是否对被覆盖:重载后的方法不会覆盖原方法,而重写后的方法会覆盖父类中的方法,调用时也只会调用重写后的方法. 3)调用方法的对象上:重载后的方法被调用时,调用对象不同时,调用的方法不同,产生的结果也不同:而重写后的方法被调用时,无论调用的对象是父类或者子类的对象,调用的方法相同,产生的结果也一样

统计APK中方法数量

Android开发中有对APK的方法数量做限制,不能超过65536.如果超过了该数目,会遇到如下异常: Conversion to Dalvikformat failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536 之所以出现上述问题,主要原因在于Android系统中,方法id存储在Dex文件中使用的是short类型数据,所以导致了dex中方法不能超过65k. 知道了上面的限制,那么如何知道生成的APK的方法数量呢?以及如何

JAVA文件夹导入到Eclipse中方法:

将JAVA文件夹导入到Eclipse中方法:方法一: 直接将java文件夹复制,然后粘贴到项目下:方法二:1.打开eclipse,点击项目的空白处,选择import:2.选择Existing Project into Workspace,点击next,找到下载的java代码,导入到eclipse中. 选到你要导入的文件,然后Finish就可以了