我想抓住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();
如何获取错误,然后我可以将其记录到我们的数据库中?
答案 0 :(得分:0)
像这样创建自定义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...
}
}
}
并且,在FilterConfig
下的App_Start
课程中
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new CustomHandleErrorAttribute());
}
}