ASP.NET MVC自定义异常捕捉及处理

在日常开发中,经常会使用自定义异常传递业务逻辑验证消息,在ASP.NET MVC可采用重载 Controller 的 OnException 方法进行自定义异常的捕捉。

自定义异常类,用于承载业务逻辑验证信息,如下列代码所示:

1 using System;
2 
3 namespace Web
4 {
5     public class CustomException : ApplicationException
6     {
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             else
22             {
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 }

详细代码可见点击下载附件


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值