我有一个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();
}
答案 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转移到用户面前之前重定向作为最后的手段。