关于asp.net:为什么在刷新浏览器时Application_BeginRequest()会触发两次?

Why does Application_BeginRequest() fire twice when refreshing browser?

我观察到在global.asax文件(在ASP.NET MVC应用程序中)中,应用程序"BeginRequest"事件会产生一些令人困惑的行为。在运行调试器时,如果刷新浏览器(IE7),则此事件将触发两次。如果我单击一个链接或手动请求一个页面,它将按预期触发一次。

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

我在一个全新的MVC项目中观察到这一点,下面将添加到global.asax.cs中

1
2
3
protected void Application_BeginRequest() {
    //executed twice
}

对于Context,我正在尝试在此事件期间向httpContext.current.items集合添加一个新对象,以便在整个请求过程中保持该对象。显然,对于一个刷新的请求,我不希望发生两次这种情况!


您确定这是对同一个URL的两个请求吗?我认为第二个可能是一些动态JS、CSS或图像文件。尝试使用fiddler或通过在调试器中查看httpcontext.current.request.uri来查找


让我吃惊的是,如果您的HTML中有一个img标记没有正确的图像路径,那么一些浏览器会向原始页面发出请求。这是一篇相关的博客文章。


您的HTML中是否有对同样传递ASP.NET管道的内容的引用,例如动态生成的图像或类似的内容?


我不知道为什么会发生这种情况,但我发现创建一个basecontroller类并让我的所有控制器从中继承更容易。更改构造函数以将项添加到httpContext。