MVC框架 - 异常处理
在ASP.NET中,错误处理是通过使用标准的尝试捕捉方法或使用应用程序事件。ASP.NET MVC附带内置支持,被称为异常过滤器功能异常处理。在这里我们要学习两种方法:一个是定义HandleError过滤器,另一个是重写onException方法。
覆盖onException方法
使用这种方式在当要处理整个操作方法所有的异常在控制器级别。
要理解这种方式,创建一个MVC应用程序(包括跟随在前面章节中的步骤)。现在添加一个新的控制器类,并添加以下代码将覆盖onException方法,并明确在行动方法抛出一个错误:

现在,让我们创建一个通用的视图名为Error,显示给用户在任何异常的应用程序发生时。在Views文件夹内,创建一个名为Shared的新文件夹,并添加一个新的名为Error的视图。

拷贝下面下面的代码到新建文件: Error.cshtml:

如果现在尝试运行应用程序,它会给出结果如下。当任何异常发生在控制器内的操作方法时,上面的代码会渲染错误在视图中。

这种方法的优点是,在同一个控制器中的多个动作可以共享这个错误处理逻辑。 但是,缺点是不能跨越多个控制器使用相同的错误处理逻辑。
HandleError属性
HandleError的属性是学习过滤器过滤操作之一,在操作过滤器的篇章。HandleErrorAttribute是IExceptionFilter是的默认实现。该过滤器处理所有的控制器动作,过滤器和视图引发的例外。
要使用此功能,首先打开web.config文件的customErrors部分。打开web.config把System.Web下面的代码,并将其值设置为ON。
<customErrors mode="On"/>
我们已经有了下查看Shared文件夹中创建的错误视图。这一次,这个视图文件的代码更改为强类型,键入使用HandleErrorInfo模型(这是System.Web.MVC下存在):
@model System.Web.Mvc.HandleErrorInfo
@{
Layout = null;
} <!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Error</title>
</head>
<body>
<h2>
Sorry, an error occurred while processing your request. </h2>
<h2>Exception details</h2>
<p>
Controller: @Model.ControllerName <br>
Action: @Model.ActionName
Exception: @Model.Exception
</p> </body>
</html>
现在,将下面的代码在控制器文件,其中规定在控制器文件[HandleError]属性。
using System;
using System.Data.Common;
using System.Web.Mvc; namespace ExceptionHandlingMVC.Controllers
{
[HandleError]
public class ExceptionHandlingController : Controller
{
public ActionResult TestMethod()
{
throw new Exception("Test Exception");
return View();
}
}
}
如果尝试现在运行的应用程序,会得到类似如下的错误:

正如所看到的,这一次的错误包含了控制器和动作细节相关的更多信息。以这种方式,HandleError可用于在任何级别和跨控制器处理这样的错误。
MVC框架 - 异常处理的更多相关文章
- Spring MVC 框架的架包分析,功能作用,优点
由于刚搭建完一个MVC框架,决定分享一下我搭建过程中学习到的一些东西.我觉得不管你是个初级程序员还是高级程序员抑或是软件架构师,在学习和了解一个框架的时候,首先都应该知道的是这个框架的原理和与其有关j ...
- [Java] 使用 Spring 2 Portlet MVC 框架构建 Portlet 应用
转自:http://www.ibm.com/developerworks/cn/java/j-lo-spring2-portal/ Spring 除了支持传统的基于 Servlet 的 Web 开发之 ...
- Portlet MVC框架
Portlet MVC框架 16.1. 介绍 Spring不仅支持传统(基于Servlet)的Web开发,也支持JSR-168 Portlet开发. Portlet MVC框架尽可能多地采用Web ...
- openresty 前端开发轻量级MVC框架封装一(控制器篇)
通过前面几章,我们已经掌握了一些基本的开发知识,但是代码结构比较简单,缺乏统一的标准,模块化,也缺乏统一的异常处理,这一章我们主要来学习如何封装一个轻量级的MVC框架,规范以及简化开发,并且提供类似p ...
- spring MVC框架入门(外加SSM整合)
spring MVC框架 一.什么是sping MVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 W ...
- Spring 4 官方文档学习 Web MVC 框架
1.介绍Spring Web MVC 框架 Spring Web MVC 框架是围绕DispatcherServlet设计的,所谓DispatcherServlet就是将请求分发到handler,需要 ...
- 深入详解美团点评CAT跨语言服务监控(九)CAT管理平台MVC框架
在第2章我们讲到,服务器在初始化CatServlet 之后, 会初始化 MVC,MVC也是继承自AbstractContainerServlet , 同样也是一个 Servlet 容器,这是一个非常古 ...
- 戏说 Spring MVC 框架
Spring MVC 是 Spring 框架的一部分,和 Struts 一样都是属于 web 层框架,根据项目分层的思想,一个项目基本可以分为持久层,业务层和 web 层.而 Spring MVC 主 ...
- Asp.Net Core MVC框架内置过滤器
第一部分.MVC框架内置过滤器 下图展示了Asp.Net Core MVC框架默认实现的过滤器的执行顺序: Authorization Filters:身份验证过滤器,处在整个过滤器通道的最顶层.对应 ...
随机推荐
- Physicals
[Physicals] The physics simulation in Sprite Kit is performed by adding physics bodies to scenes. [T ...
- Windows消息机制要点
1. 窗口过程 每个窗口会有一个称为窗口过程的回调函数(WndProc),它带有四个参数,分别为:窗口句柄(Window Handle),消息ID(Message ID),和两个消息参数(wP ...
- C#中的DllImport
大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功 ...
- Spring REST实践之安全
Securing REST Services 一般有六种方式实现的REST服务的安全: Session-based security HTTP Basic Authentication Digest ...
- ReentrantLock
与synchronized相同并发性和内存语义. [新增特性]锁投票.定时锁等候.可中断锁等候.更少时间调度线程. [用法注意点]Lock必须在finally块中释放. Lock lock = new ...
- 微信分享朋友圈监听(PHP)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PHP 获取js中变量的方法
留作笔记 <php? $aaa="<script>document.write(1)</script>"; echo $aaa; ?> 其中数字 ...
- Codeforces Round #136 (Div. 1)C. Little Elephant and Shifts multiset
C. Little Elephant and Shifts Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/pro ...
- stm32 IAP + APP ==>双剑合一
(扩展-IAP主要用于产品出厂后应用程序的更新作用,上一篇博文详细的对IAP 升级程序做了详细的分析http://blog.csdn.net/yx_l128125/article/details/12 ...
- 【windows socket+TCPserverclient】
Windows Socket+TCPserverclient Winsock是 Windows下套接字标准. Socket套接字基于计算机网络,提供同一系统上不同进程或由局 ...