0

我设置了 BugNet 项目 ( http://www.bugnetproject.com/ ),并且我想要自定义它。不幸的是,我对 asp 了解不多(我的背景是 WinForms,但过去我在 asp 方面做过一些有限的工作)。

无论如何,我在下面的方法中设置了一个断点,当我逐步执行它时,我发现这种方法被多次称为荒谬(在我未受过教育的情况下)。在我看来,当应用程序启动时,它应该只被调用一次。并且要清楚,它不是完成然后再次被调用,而是同时有许多线程在进行。

我的问题是:对于这样的项目,这是正常行为吗?Asp.net Web Form 项目是否自然会多次调用此方法,如果不是,我应该如何弄清楚为什么它一直被调用?

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        var app = (HttpApplication)sender;
        var context = app.Context;

        // Attempt to perform first request initialization
        Initialization.Init(context);

        if (Request.Url.AbsoluteUri.ToLower().Contains("bugdetail.aspx"))
        {
            Response.Redirect(string.Format("~/Issues/IssueDetail.aspx{0}", Request.Url.Query));
        }
    }
4

2 回答 2

1

MSDN 状态:

当 ASP.NET 响应请求时,作为 HTTP 执行管道链中的第一个事件发生。

对每个请求,而不是第一个请求。您应该将其视为请求的开始,而不是应用程序本身。一个应用程序当然可能有很多请求,例如资源。

于 2013-11-12T06:40:37.747 回答
0

Application_BeginRequest每个 asp.net 请求上都会调用,不仅是 asp.net 页面,还有处理程序,如果你设置了它,可能是图像,其他资源等。

让我们看看这里发生了什么。浏览器是同时向网络服务器请求很多资源,至少同时请求4个,页面是主要请求,然后是脚本、处理程序、图像和其他...

当您调试这一点时,浏览器会发送许多请求,并且 IIS 使用线程尽快重播它们。所以这是你看到的多线程......是的,这是正常的,BeginRequest 是在任何 asp.net 请求上发出信号,而不仅仅是 page.aspx

于 2013-11-12T07:15:36.570 回答