一个在IIS7中不起作用的HttpModule

时间:2010-02-15 17:10:29

标签: c# .net asp.net iis-7 httpmodule

我有一个HttpModule,可以在ASP.NET WebForms应用程序中重定向某些URL。它可以在我的机器上使用ASP.NET Development Server。但是当我用IIS7将它上传到我们的Win2k8服务器时,它似乎根本没有反应。我把<add name="Test.Web" type="Test.Web.Core.HttpModules.RedirectOldUrls, Test.Web" />放在system.webServer / modules部分,在inetmgr中我可以看到其他模块。在我上传代码之前和之后,网站似乎表现得一样,不应该这样。

经过编辑的代码示例:

public void Init(HttpApplication context)
    {
        context.Error += PageNotFoundHandler;
    }

    public static void PageNotFoundHandler(object sender, EventArgs evt)
    {
        Exception lastErrorFromServer = HttpContext.Current.Server.GetLastError();

        if (lastErrorFromServer != null)
        {
            RedirectToNewUrlIfApplicable();
        }
    }

    private static void RedirectToNewUrlIfApplicable()
    {
        string redirectUrl = GetRedirectUrl();

        if (!string.IsNullOrEmpty(redirectUrl))
        {
            HttpContext.Current.Response.Status = "301 Moved Permanently";
            HttpContext.Current.Response.AddHeader("Location", redirectUrl);
        }
    }

    private static string GetRedirectUrl()
    {
        return RedirectableUrls.GetUrl();
    }

2 个答案:

答案 0 :(得分:3)

也许我错过了什么。但您是否在HttpModule部分定义了system.webServer?而且,您是否将runAllManagedModulesForAllRequests设置为true?

<modules runAllManagedModulesForAllRequests="true">
    <add name="You Module Name" type="Your Module Type"/>
</modules>

答案 1 :(得分:0)

显然,IIS7不接受使用HttpContext.Error,如下所示:

context.Error += RedirectMethod;

相反,我必须这样做:

context.AuthenticateRequest += RedirectMethod;

这似乎有效。为什么,我不知道。我只想在将404转移到用户面前之前重定向作为最后的手段。