Asp.net 如何从全局web.config中配置的IHttpModule生成404响应?

Asp.net 如何从全局web.config中配置的IHttpModule生成404响应?,asp.net,iis-6,ihttpmodule,Asp.net,Iis 6,Ihttpmodule,我正在尝试基于生成服务器上所有站点上的特定请求的 我在服务器的全局web.config中配置了一个IHttpModule,其中包含以下代码: private void Application_BeginRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context;

我正在尝试基于生成服务器上所有站点上的特定请求的

我在服务器的全局
web.config
中配置了一个
IHttpModule
,其中包含以下代码:

private void Application_BeginRequest(Object source, EventArgs e)
{
    HttpApplication application = (HttpApplication)source;
    HttpContext context = application.Context;

    if (isBot(context.Request.UserAgent))
    {
        System.Diagnostics.EventLog.WriteEntry(
            "Application",
            "\nBotRequestChecker -- request 404d\n" + "Url: " + 
              context.Request.Url + "\nUserAgent: " + context.Request.UserAgent,
            EventLogEntryType.Information);
        context.Response.StatusCode = 404;
        context.Response.StatusDescription = "Not Found";
        context.ApplicationInstance.CompleteRequest();
    }
}
在浏览器中设置
用户代理
并访问页面会导致事件日志中出现条目,但该页面也会返回,没有404状态

有没有想过我错过了什么

更新:

如果我将
IHttpModule
添加到单个站点(在站点的
web.config
中),它似乎确实可以工作,但不是所有站点都可以

更新2:
IHttpModule
仅适用于IIS7服务器上的单个站点,而不适用于IIS6

确保您已在模块的
IHttpModule.Init()实现中订阅了BeginRequest事件。在
IHttpModule
实现中,事件不会像在Global.asax中那样自动连接

起初,我也错过了关于global web.config的部分

在64位服务器上,您需要确保在需要支持的所有ASP.NET版本中更改32位和64位配置(取决于站点运行的位数):

%windows%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config
%windows%\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config

%windows%\Microsoft.NET\Framework\v4.0.30319\CONFIG\web.config
%windows%\Microsoft.NET\Framework64\v4.0.30319\CONFIG\web.config

如果您同时针对IIS6和IIS7,您需要确保模块在IIS6的
/
元素和IIS7的
/
元素中都被引用。

这是我最初尝试的,具有相同的非404结果。编辑我的答案以删除该结果。。。基于此:看起来你做的事情是对的。你能确认代码是否真的被点击了吗?另外,你是在IIS 6服务器上进行测试,还是现在正在VS dev服务器(Cassini)上运行?是的--设置状态代码时,会在正上方发布事件日志条目。因此,关于你的附录,当模块仅在机器级别而不是在站点级别配置时,是否会发布日志条目?