ASP.NET MVC集成EntLib实现“自动化”异常处理[实例篇]

个人觉得异常处理对于程序员来说是最为熟悉的同时也是最难掌握的。说它熟 悉,因为仅仅就是try/catch/finally而已。说它难以掌握,则是因为很多开发人 员却说不清楚try/catch/finally应该置于何处?什么情况下需要对异常进行日志 记录?什么情况下需要对异常进行封装?什么情况下需要对异常进行替换?对于 捕获的异常,在什么情况下需要将其再次抛出?什么情况下则不需要?

合理的异常处理应该是场景驱动的,在不同的场景下,采用的异常处理策略往 往是不同的。异常处理的策略应该是可配置的,因为应用程序出现怎样的异常往 往是不可预测的,现有异常策略的不足往往需要在真正出现某种异常的时候才会 体现出来,所以我们需要一种动态可配置的异常处理策略维护方式。目前有一些 开源的异常处理框架提供了这种可配置的、场景驱动的异常处理方式,EntLib的 Exception Handling Application Block(以下简称EHAB)就是一个不错的选择 。[源代码从这里下载]

一、通过指定Handle-Error-Action响应请求

在正式介绍如何通过扩展实现与EntLib以实现自动化异常处理之前,我们不妨 先来体验一下异常处理具有怎样的“自动化”特性。以用户登录场景为例,我们 在通过Visual Studio的ASP.NET MVC项目模板创建的Web应用中定义了如下一个简 单的数据类型LoginInfo封装用户登录需要输入的用户名和密码。

   1: public class LoginInfo   2: {   3:     [DisplayName("用户名")]   4:     [Required(ErrorMessage="请输入{0}")]   5:     public string UserName { get; set; }   6:    7:     [DisplayName("密码")]   8:     [Required(ErrorMessage = "请输入{0}")]   9:     [DataType(DataType.Password)]  10:     public string Password { get; set; }  11: }

然后我们定义了如下一个HomeController。基于HTTP-GET的Action方法Index 将会呈现一个用户登录View,该View使用创建的LoginInfo对象作为其Model。真 正的用户验证逻辑定义在另一个应用了HttpPostAttrubute特性的Index方法中: 如果用户名不为Foo,抛出InvalidUserNameException异常;如果密码不是 “password”,则抛出InvalidPasswordException异常。 InvalidUserNameException和InvalidPasswordException是我们自定义的两种异 常类型。

   1: [ExceptionPolicy("defaultPolicy")]   2: public class HomeController : ExtendedController   3: {   4:     public ActionResult Index()   5:     {   6:         return View(new LoginInfo());   7:     }   8:    9:     [HttpPost]  10:     [HandleErrorAction("OnIndexError")]  11:     public ActionResult Index(LoginInfo loginInfo)  12:     {  13:         if (string.Compare(loginInfo.UserName, "foo", true) != 0)  14:         {  15:             throw new InvalidUserNameException();  16:         }  17:   18:         if (loginInfo.Password != "password")  19:         {  20:             throw new InvalidPasswordException();  21:         }  22:         return View(loginInfo);  23:     }  24:   25:     [HttpPost]  26:     public ActionResult OnIndexError(LoginInfo loginInfo)  27:     {  28:         return View(loginInfo);  29:     }  30: }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索异常
, public
, 集成 异常
, 处理
, 指针ajaxspring mvc异常
什么
,以便于您获取更多的相关知识。

时间: 2024-10-27 01:06:20

ASP.NET MVC集成EntLib实现“自动化”异常处理[实例篇]的相关文章

ASP.NET MVC集成EntLib实现“自动化”异常处理[实现篇]

通过<实例篇>的实演示可以看出我们通过扩展实现的自动异常处理机制能够 利用EntLib的EHAB根据执行的一场处理策略对某个Action方法执行过程中抛出的 异常进行处理.对于处理后的结果,则按照如下的机制对请求进行响应.[源代码 从这里下载] 对于Ajax请求,直接创建一个用于封装被处理后异常的数据对象,并据此创建 一个JsonResult将异常信息回复给客户端. 对于非Ajax请求,如果当前Action方法上应用HandleErrorActionAttribute特 性设置了匹配的Acti

【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

原文:[网站国际化必备]Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo        开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩然(孟襄阳),张继.杜审言,文学家皮日休,北宋著名书画家米芾(米襄阳),"允冠百王"的光武帝刘秀,东方圣人释道安等一大批历史文化名人.小说<三国演义>12

学习 ASP.NET MVC (第四回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 我们继续ASP.NET MVC之旅.上文中我们实现了对User信息的展示,详细信息的列表,还有错误页的实现.本文继续完成添加,修改,删除的操作.首先我们来完成Controller的代码: Code //         // GET: /Use

艾伟_转载:学习 ASP.NET MVC (第五回)理论篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 通过前几篇文章,我们通过ASP.NET MVC创建了一个简单的应用程序,学习了ASP.NET MVC的基本框架和工作流程.但是Demo中很多东西都是VS为我们自动生成的,比如View的html代码等.此文和大家一起学习一下ASP.NET MVC

艾伟_转载:学习 ASP.NET MVC (第四回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 我们继续ASP.NET MVC之旅.上文中我们实现了对User信息的展示,详细信息的列表,还有错误页的实现.本文继续完成添加,修改,删除的操作.首先我们来完成Controller的代码: Code//        // GET: /Users

学习 ASP.NET MVC (第五回)理论篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 通过前几篇文章,我们通过ASP.NET MVC创建了一个简单的应用程序,学习了ASP.NET MVC的基本框架和工作流程.但是Demo中很多东西都是VS为我们自动生成的,比如View的html代码等.此文和大家一起学习一下ASP.NET MVC

学习 ASP.NET MVC (第三回)实战篇

本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回)实战篇 学习 ASP.NET MVC (第五回)理论篇 创建Controllers和Views我们再次回顾下ASP.NET MVC的基本工作流程:URL-->Controller(会执行一个方法Action)-->从数据库中获取一个Model对象-->将Model作为ViewData传递给V

ASP.NET MVC如何显示UserControl控件(扩展篇)

昨晚Insus.NET有怀旧一下<念念不忘,ASP.NET MVC显示WebForm网页或UserControl控件>http://www.cnblogs.com/insus/p/3641610.html 那仅是小小尝试,还有很多不明的地方. 那一篇其中有Render用户控件ascx的.如今Insus.NET想重构它一下,让步其能在Action或是Razor语法中使用. 创建一个AscxUtility.cs,这们我们可以在应用程序中多个地方使用. 这样我们就可以重构一下昨晚那个public A

ASP.NET MVC的运行机制

一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在"伪"MVC框架上的Web应用 ASP.NET MVC是如何运行的[2]: URL路由 ASP.NET MVC是如何运行的[3]: Controller的激活 ASP.NET MVC是如何运行的[4]: Action的执行 二.URL 路由 ASP.NET的路由系统:URL与物理文件的分离 ASP.