我正在使用Global.asax文件中的Application_BeginRequest事件(在ASP.NET MVC应用程序中)观察到一些非常令人困惑的行为。当通过调试器运行时,如果我刷新浏览器(IE7),此事件将触发两次。如果我单击链接或以其他方式手动请求页面,它会触发一次 - 如预期的那样。
为什么刷新会导致BeginRequest触发两次?
我正在通过一个全新的MVC项目来观察这一点,其中以下内容被加入Global.asax.cs
protected void Application_BeginRequest() {
//executed twice
}
对于上下文,我试图在此事件期间向HttpContext.Current.Items集合添加一个新对象,因此它将在整个请求过程中持续存在。显然,我不希望单次刷新请求发生两次!
答案 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管道的东西,比如动态生成的图像或类似的东西?