MVC 01 filterError(异常)
1 mvc 异常 一部分在applicatuon_error中处理,另一部分在HandleErrorAttribute中处理,HandleErrorAttribute‘可以处理以下异常
HandleErrorAttribute:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace filter.Filters { public class CustomHandleErrorAttribute : HandleErrorAttribute { public override void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHandled) // 异常是否已经被处理.如果未被处理 { if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest()) // 如果是ajax请求 { filterContext.Result = new JsonResult() { Data = new { code = -1, message = filterContext.Exception.Message }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } else//其他 { //返回一个view filterContext.Result = new ViewResult() { ViewName = "~/views/shared/Error.cshtml",// 视图路径 ViewData = new ViewDataDictionary<string>(filterContext.Exception.Message), }; } filterContext.ExceptionHandled = true;// 异常已经被处理 } //base.OnException(filterContext); } } }
全局注册:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) { // filters.Add(new HandleErrorAttribute()); filters.Add(new CustomHandleErrorAttribute()); //全局注册自定义的error,不用每个action都打标签 }
Application_Error:
protected void Application_Error() { var exception = Server.GetLastError();// 获取最后一个Error Response.Write(exception.Message); var url = Request.Url.AbsoluteUri; Response.Write(HttpContext.Current.Error.Message); // 获取异常信息 Response.Redirect("~/Home/about");// 指定新的url地址 Server.ClearError(); }