2013-11-14 22 views
3

这是我第一次使用HttpModules。我需要为现有的ASP.NET应用程序创建一个“拖放”类型的解决方案,通过将用户重定向到一个新的“ErrorFeedback.aspx”页面来提供常见的错误处理。所以,当一个应用程序遇到异常时,用户将被重定向到ErrorFeedback.aspx,在那里他们将能够提供关于错误的反馈,如果他们需要的话。目前我们有大约300个网络应用程序,所以看起来最有前途的“拖放”解决方案是HttpModule。这个ErrorFeedback页面将成为一个新的页面,也将被添加到解决方案中。最终,这些组件(DLL和自定义网页)将在Nuget包中结束,但暂时需要手动复制/粘贴到现有解决方案中。HttpModule - OnError命中时需要将用户重定向到特定页面

我听说在模块中做重定向是不好的做法。 HttpModule遇到OnError时,将用户重定向到特定页面的最佳做法是什么?

回答

1

如果你只需要重定向你将是最好的使用web.config custom error pages。 但是,如果你还想做更多的事情,如登录,例如比你需要使用HttpModule,像这样:

public class ErrorManagementModule : IHttpModule 
{ 
    public void Dispose() { } 

    public void Init(HttpApplication context) 
    { 
     //handle context exceptions 
     context.Error += (sender, e) => HandleError(); 
     //handle page exceptions 
     context.PostMapRequestHandler += (sender, e) => 
      { 
       Page page = HttpContext.Current.Handler as Page; 
       if (page != null) 
        page.Error += (_sender, _e) => HandleError(); 
      }; 
    } 

    private void HandleError() 
    { 
     Exception ex = HttpContext.Current.Server.GetLastError(); 
     if (ex == null) return; 

     LogException(ex); 

     HttpException httpEx = ex as HttpException; 
     if (httpEx != null && httpEx.GetHttpCode() == 500) 
     { 
      HttpContext.Current.Response.Redirect("/PrettyErrorPage.aspx", true); 
     } 
    } 
} 
+0

web.config自定义错误页面是否会捕获非HTTP错误,例如应用程序异常?我不这么认为,但我可能是错的? –

+0

那么大多数未处理的异常将转换为HTTP 500,如果您在web.config中有500重定向,它将重定向。 –

1

您可以使用custom error pages in Web.config而不是HttpModule。但是,如果您确实需要重定向,最好使用RewitePath method

这里有一些注意事项一般:

  1. 当您使用URL重写,你应该小心SEO。因为您的原始网址会计入SERP。
  2. ASP.NET路由也是一种很好的机制,它可以替代你想要做的
  3. 为什么你说重定向在HttpModule不好?任何具体原因?
+0

我刚才听到* *,这是不好的。我不知道它是否真的存在。此外,这是一个内联网应用程序,所以SEO是一个非问题。谢谢你的信息! –

相关问题