为什么在刷新浏览器时Application_BeginRequest()会触发两次?

时间:2009-07-16 18:51:12

标签: asp.net

我正在使用Global.asax文件中的Application_BeginRequest事件(在ASP.NET MVC应用程序中)观察到一些非常令人困惑的行为。当通过调试器运行时,如果我刷新浏览器(IE7),此事件将触发两次。如果我单击链接或以其他方式手动请求页面,它会触发一次 - 如预期的那样。

为什么刷新会导致BeginRequest触发两次?

我正在通过一个全新的MVC项目来观察这一点,其中以下内容被加入Global.asax.cs

protected void Application_BeginRequest() { 
    //executed twice
}

对于上下文,我试图在此事件期间向HttpContext.Current.Items集合添加一个新对象,因此它将在整个请求过程中持续存在。显然,我不希望单次刷新请求发生两次!

4 个答案:

答案 0 :(得分:7)

你确定它真的是对同一个网址的2个请求吗?我认为第二个可能是一些动态的JS,CSS或图像文件。尝试找出Fiddler或者在调试器中查看HttpContext.Current.Request.Uri

答案 1 :(得分:2)

让我感到惊讶的是,如果你的html中有一个img标签没有合适的图像路径,一些浏览器会向原始页面发出请求。 Here is a related blog post

答案 2 :(得分:0)

我不确定为什么会发生这种情况但是我发现创建一个BaseController类并让我的所有控制器都继承它更容易。更改构造函数以将项添加到HttpContext。

答案 3 :(得分:0)

你的HTML中是否有引用也通过ASP.NET管道的东西,比如动态生成的图像或类似的东西?