普通controller的错误处理
BaseController 重写 OnException,其他controller继承该BaseController即可。
public class BaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
Logger.Default.WriteError("发生错误", filterContext.Exception);
filterContext.ExceptionHandled = true;
Response.Redirect("/Error?url=" + System.Web.HttpUtility.UrlEncode(Request.Path.ToString()));
}
}
WebApi的错误处理
写一个ExceptionFilterAttribute的继承类,并重写OnException,然后在WebApiconfig的Register里添加到config里。
public class WebApiExceptionFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
// 异常日志记录(正式项目里面一般是用log4net记录异常日志)
Logger.Default.WriteError("发生错误", actionExecutedContext.Exception);
actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
base.OnException(actionExecutedContext);
}
}
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API 配置和服务
// Web API 路由
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 错误处理器
config.Filters.Add(new WebApiExceptionFilter());
}
}