HttpModule - OnError命中时需要将用户重定向到特定页面
这是我第一次使用HttpModules。我需要为现有的ASP.NET应用程序创建一个“拖放”类型的解决方案,通过将用户重定向到一个新的“ErrorFeedback.aspx
”页面来提供常见的错误处理。所以,当一个应用程序遇到异常时,用户将被重定向到ErrorFeedback.aspx
,在那里他们将能够提供关于错误的反馈,如果他们需要的话。目前我们有大约300个网络应用程序,所以看起来最有前途的“拖放”解决方案是HttpModule
。这个ErrorFeedback页面将成为一个新的页面,也将被添加到解决方案中。最终,这些组件(DLL和自定义网页)将在Nuget包中结束,但暂时需要手动复制/粘贴到现有解决方案中。HttpModule - OnError命中时需要将用户重定向到特定页面
我听说在模块中做重定向是不好的做法。 HttpModule
遇到OnError
时,将用户重定向到特定页面的最佳做法是什么?
如果你只需要重定向你将是最好的使用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);
}
}
}
您可以使用custom error pages in Web.config而不是HttpModule
。但是,如果您确实需要重定向,最好使用RewitePath
method。
这里有一些注意事项一般:
- 当您使用URL重写,你应该小心SEO。因为您的原始网址会计入SERP。
- ASP.NET路由也是一种很好的机制,它可以替代你想要做的
- 为什么你说重定向在
HttpModule
不好?任何具体原因?
我刚才听到* *,这是不好的。我不知道它是否真的存在。此外,这是一个内联网应用程序,所以SEO是一个非问题。谢谢你的信息! –
web.config自定义错误页面是否会捕获非HTTP错误,例如应用程序异常?我不这么认为,但我可能是错的? –
那么大多数未处理的异常将转换为HTTP 500,如果您在web.config中有500重定向,它将重定向。 –