这是我第一次使用HttpModules。我需要为现有的ASP.NET应用程序创建一种“拖放”解决方案,通过将用户重定向到新的“ErrorFeedback.aspx
”页面来提供常见的错误处理。因此,当应用遇到异常时,用户将被重定向到ErrorFeedback.aspx
,如果他们需要,他们将能够提供有关错误的反馈。我们目前有大约300个网络应用程序,因此最有希望的“拖放”解决方案是HttpModule
。此ErrorFeedback页面将是一个新页面,也将添加到解决方案中。最终,这些组件(DLL和自定义网页)将在Nuget包中结束,但目前需要手动将其复制/粘贴到现有解决方案中。
我听说在模块中进行重定向是不好的做法。在遇到OnError
HttpModule
时,将用户重定向到特定网页的最佳做法是什么?
答案 0 :(得分:1)
您可以使用custom error pages in Web.config代替HttpModule
。但如果你真的需要重定向,最好使用RewitePath
method。
这里有一些注意事项:
HttpModule
中说重定向不好?有什么特别的原因吗?答案 1 :(得分: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);
}
}
}