在日常开发中,经常会使用自定义异常传递业务逻辑验证消息,在ASP.NET MVC可采用重载 Controller 的 OnException 方法进行自定义异常的捕捉。
自定义异常类,用于承载业务逻辑验证信息,如下列代码所示:
1 using System;2 3 namespace Web4 {5 public class CustomException : ApplicationException6 {7 public CustomException(string message) : base(message) { }8 }9 }
自定义 ASP.NET MVC 控制器,重载 OnException 方法,核心部分在于获取自定义异常,将异常消息附加到 ModelState,并将 filterContext.ExceptionHandled 设置为 true,获取发送页面请求的 ActionName,并重新执行该 Action。最终验证信息可通过 Html.ValidationSummary() 显示出来。如下列代码所示:
1 using System.Web.Mvc; 2 using NLog; 3 4 namespace Web 5 { 6 public class BaseController : Controller 7 { 8 private readonly Logger _logger = LogManager.GetCurrentClassLogger(); 9 10 protected override void OnException(ExceptionContext filterContext)11 {12 var exception = filterContext.Exception;13 14 if (exception is CustomException)15 {16 ModelState.AddModelError("", exception.Message);17 filterContext.ExceptionHandled = true;18 var actionName = RouteData.GetRequiredString("action");19 ActionInvoker.InvokeAction(filterContext.Controller.ControllerContext, actionName);20 }21 else22 {23 _logger.ErrorException(exception.Message, exception);24 }25 }26 }27 }
演示代码如下列所示。
1 using System.Web.Mvc; 2 using Web.Models; 3 4 namespace Web.Controllers 5 { 6 public class HomeController : BaseController 7 { 8 public ActionResult Index() 9 {10 return View(new Model());11 }12 13 [HttpPost]14 public ActionResult Index(Model model)15 {16 if (ModelState.IsValid)17 {18 throw new CustomException("自定义异常消息。");19 }20 21 return View(model);22 }23 }24 }
详细代码可见点击下载附件。
联系客服