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。