3

に基づいて、サーバー上のすべてのサイトで特定の要求に対して404 応答を生成しようとしていますHttpRequest.UserAgent

以下のコードを含むIHttpModuleサーバーのグローバルに を構成しました。web.config

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();
    }
}

ブラウザで を設定しUser-Agentてページにアクセスすると、イベント ログにエントリが記録されますが、そのページも 404 ステータスなしで返されます。

私が見逃しているものについて何か考えはありますか?

アップデート:

すべてのサイトではなく、単一のサイト (サイトの )にIHttpModule追加すると機能するようです。web.config

更新 2: IIS6ではなく、 IIS7サーバーIHttpModule上の単一のサイトでのみ機能し ます。

4

1 に答える 1

0

IHttpModule.Init()モジュールの実装でBeginRequestイベントをサブスクライブしていることを確認してください。IHttpModuleイベントは、Global.asaxの場合と同じように、実装で自動配線されません。

また、最初はグローバル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の両方を対象としている場合は、モジュールが<system.web>/<httpModules>IIS6の<system.webServer>/<modules>要素とIIS7の要素の両方で参照されていることを確認する必要があります。

于 2011-03-31T18:08:23.523 に答える