使用自定义错误页面维护错误信息
本文关键字:错误 维护 信息 自定义 | 更新日期: 2023-09-27 18:33:57
>我试图捕获 404 和 500 错误。 我已经阅读了这么多堆积如山的问题和答案,似乎都说他们的方式是最好的。 所以我只选了一个,然后就跟着去了。 它做了我需要它做的事情,但是我似乎无法在任何地方获得实际的错误信息。
我需要开始将这些记录到我们的数据库中,我到底如何得到错误? 我想知道他们试图访问的链接等。
这是我如何使用IIS7+过滤掉我们正在使用的错误
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/Error/PageNotFound" />
<remove statusCode="500" />
<error statusCode="500" responseMode="ExecuteURL" path="/Error/Error500" />
</httpErrors>
当我逐步完成我的PageNotFound操作时,我似乎无法获得错误信息。
我试过(Exception exception)
作为参数,我试过Exception exception = Server.GetLastError();
如何获取错误,然后将其记录到我们的数据库中?
创建一个自定义HandleErrorAttribute
,如下所示:
public class CustomHandleErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
// Execute the normal exception handling routine...
base.OnException(filterContext);
var exception = filterContext.Exception;
if (exception is HttpException)
{
var httpException = exception as HttpException;
if(httpException.ErrorCode == 404)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {
action = "PageNotFound",
controller = "Error",
error = httpException.Message
}));
}
// else if...
}
}
}
并且,在App_Start
下FilterConfig
课上:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomHandleErrorAttribute());
}
}