1

我有一个实现IHttpModule的类。这是一个帮助我的应用程序防御 DDOS 攻击的支持类。实现该BeginRequest方法后,我尝试调试我的代码,并且由于某种原因,每次调试该类时,我在 Visual Studio 中有多个线程。我不明白为什么突然间,在我的本地机器上运行这个应用程序时,我得到了几个线程,而且它只发生在这个类中。

4

1 回答 1

2

HttpModule 可能会拦截对您的应用程序的所有请求,包括文件(js、css、图像等)

查看每个请求的 Request 对象,并查看 Url 属性以了解发生了什么。

编辑: HttpModules 在请求流的早期就处于活动状态,并且它们通常会受到服务器的大多数请求的影响,因此请将 HttpModule 中的代码保持在最低限度。一个例子:如果你正在对文件进行权限,请确保请求实际上是命中文件(即请求的 url 以 /files/ 开头)。只要有可能,缓存数据以供 HttpModule 使用,不要为 HttpModule 中的每个请求都访问数据库!

您在实际应用程序中可能获得较少命中的原因是,即使是对图像、js 文件、css 文件等的请求也可能在 HttpModule 中产生命中,但在您的应用程序中,只有针对应用程序的请求才会命中您的断点(用于 Web 窗体的 aspx、asmx 等以及 ASP.NET MVC 中可识别的路由)。

要查看您在 HttpModule 中处理的请求,请查看 url 变量的值:

void context_BeginRequest(object sender, EventArgs e) {
    HttpApplication app = (HttpApplication)sender;
    String url = app.Request.Url.OriginalString;
}
于 2012-08-01T16:31:02.703 回答