HttpModule, который не работает в IIS7 - PullRequest
4 голосов
/ 15 февраля 2010

У меня есть HttpModule, который перенаправляет определенные URL-адреса в приложении ASP.NET WebForms. Он работает на моей машине с сервером разработки ASP.NET. Но когда я загружаю его на наш сервер Win2k8 с IIS7, он, похоже, совсем не реагирует. Я поместил <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 ]

3 голосов
/ 15 февраля 2010

Может быть, я что-то упустил. Но вы определили свой HttpModule в разделе system.webServer? А также, вы установили runAllManagedModulesForAllRequests в true?

<modules runAllManagedModulesForAllRequests="true">
    <add name="You Module Name" type="Your Module Type"/>
</modules>
0 голосов
/ 16 февраля 2010

По-видимому, IIS7 не принимал с помощью HttpContext.Error, как это:

context.Error += RedirectMethod;

Вместо этого я должен был сделать так:

context.AuthenticateRequest += RedirectMethod;

Что, кажется, работает. Почему я не знаю. Я только хотел перенаправить в крайнем случае, прежде чем 404 сбрасывается в лицо пользователя.

...