在Global.asax文件中
可以看到系统异常处理的捕获:
1
2
3
4
|
public
static
void
RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(
new
HandleErrorAttribute());
}
|
我们需要重写这个捕获方法
1、重写HandleErrorAttribute
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/// <summary>
/// 错误日志(Controller发生异常时会执行这里)
/// </summary>
public
class
AppHandleErrorAttribute : HandleErrorAttribute
{
/// <summary>
/// 异常
/// </summary>
/// <param name="filterContext"></param>
public
override
void
OnException(ExceptionContext filterContext)
{
//使用log4net或其他记录错误消息
Exception Error = filterContext.Exception;
string
Message = Error.Message;
//错误信息
string
Url = HttpContext.Current.Request.RawUrl;
//错误发生地址
filterContext.ExceptionHandled =
true
;
filterContext.Result =
new
RedirectResult(
"/SiteStatus/HtmlError500/?q="
+ Message);
//跳转至错误提示页面
}
}
|
2、使用重写后的HandleAttribute
更改系统注册方法:
1
2
3
4
|
public
static
void
RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(
new
AppHandleErrorAttribute());
}
|
以上方法就完成了对500错误异常的捕获。
若还需要捕获404错误,则可以使用web.config文件来设置,因为404可以无需记录详细消息。
1
2
3
|
<
customErrors
mode
=
"On"
>
<
error
statusCode
=
"404"
redirect
=
"~/SiteStatus/HtmlError404?404"
/>
</
customErrors
>
|
相应的Controller和View需自己加上即可。