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:身份验证过滤器,处在整个过滤器通道的最顶层.对应 ...
随机推荐
- .net 配置ueditor
添加引用如下: <script src="../Ueditor/ueditor.config.js" type="text/javascript"> ...
- UVaLive 6802 Turtle Graphics (水题,模拟)
题意:给定一个坐标,和一行命令,按照命令走,问你有多少点会被访问超过一次. 析:很简单么,按命令模拟就好,注意有的点可能走了多次,只能记作一次. 代码如下: #pragma comment(linke ...
- VS2008注册码
PYHYP-WXB3B-B2CCM-V9DX9-VDY8T 如果下载的是90天的试用版,下载下来以后把ISO里面的Setup\setup.sdb文件用记事本打开,把其中的[Product Key]下面 ...
- JavaScript事件处理的三种方式(转)
一.什么是JavaScript事件? 事件(Event)是JavaScript应用跳动的心脏,也是把所有东西粘在一起的胶水,当我们与浏览器中Web页面进行某些类型的交互时,事件就发生了. 事件可能是用 ...
- 利用 Heritrix 构建特定站点爬虫
http://www.ibm.com/developerworks/cn/opensource/os-cn-heritrix/
- 28.怎样在Swift中实现单例?
1.回忆一下OC中的单例实现 //AFNetworkReachabilityManager中的单例,省略了其他代码 @interface AFNetworkReachabilityManager : ...
- Notepad++配置Python运行环境
转自:http://www.cnblogs.com/zhcncn/p/3969419.html Notepad++配置Python开发环境 1. 安装Python 1 下载 我选择了32位的2.7 ...
- insertAfter()
<div id="b">bbbbbbbbb</div> <div>dddddd</div> JavaScript window.on ...
- 【转】牛逼闪闪的Ruby迭代器
D瓜哥最近想做一个网站,另外,老早就有学习一门动态语言的想法,满足着两个条件的编程语言中,Ruby.Python是最合适的两种语言.现在Ruby on Rails如日中天,光芒万丈!所以,就选定了Ru ...
- 【M11】禁止异常流出析构方法之外
1.在两种情况下,调用析构方法:a.在正常状态下被销毁,栈上的对象离开作用域或者堆上的对象执行delete:b.抛出异常,堆栈回滚,栈上已经构造好的对象,也就是抛出异常之前的代码,自动调用析构方法.注 ...