开发手册 欢迎您!
软件开发者资料库

MVC框架 - 异常处理

MVC框架异常处理 - 从简单和简单的步骤学习Web设计中的MVC框架,从基本概念到高级概念,包括简介,体系结构和流程,MVC和ASP.NET Web窗体,文件夹,模型,控制器,视图,布局,路由引擎,过滤器和动作过滤器,第一个应用程序,高级MVC示例,Ajax支持,异常处理,捆绑和缩小。

在ASP.NET中,使用标准try catch方法或使用应用程序事件来完成错误处理. ASP.NET MVC内置了对异常处理的支持,使用称为异常过滤器的功能.我们将在这里学习两种方法:一种是覆盖onException方法,另一种是通过定义HandleError过滤器.

覆盖OnException方法

这种方法当我们想要在控制器级别处理Action方法的所有异常时使用.

要理解这种方法,请创建一个MVC应用程序(按照前面章节中介绍的步骤).现在添加一个新的Controller类并添加以下代码覆盖onException方法并在Action方法中显式抛出错误 :

MVC异常处理

现在让我们创建一个名为错误的公共视图,当应用程序中发生任何异常时,该视图将显示给用户.在Views文件夹中,创建一个名为Shared的新文件夹,并添加一个名为Error的新视图.

MVC错误处理

将以下代码复制到新创建的Error.cshtml :

MVC Exception Common View

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

MVC常见异常处理

此方法的优点是同一控制器中的多个操作可以共享此错误处理逻辑.但是,缺点是我们不能在多个控制器上使用相同的错误处理逻辑.

HandleError属性

HandleError属性是其中一个动作我们在过滤器和动作过滤器一章中研究过滤器. HandleErrorAttribute是IExceptionFilter的默认实现.此过滤器处理控制器操作,过滤器和视图引发的所有异常.

要使用此功能,首先打开web.config中的customErrors部分.打开web.config并将以下代码放在system.web中并将其值设置为On.

我们已经在Views下的Shared文件夹中创建了错误视图.这次将此View文件的代码更改为以下内容,以使用HandleErrorInfo模型(存在于System.Web.MVC下)对其进行强类型化.

@model System.Web.Mvc.HandleErrorInfo @{ Layout = null; }                      Error                  

          Sorry, an error occurred while processing your request.        

       

Exception details

             

          Controller: @Model.ControllerName 
          Action: @Model.ActionName          Exception: @Model.Exception       

        

现在将以下代码放在控制器文件中,该文件指定Controller文件中的[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();       }    } }

如果您现在尝试运行该应用程序,您将收到类似于显示的错误在下面的屏幕截图中.

MVC Exception

如您所见,这次错误包含有关Controller和Action相关细节的更多信息.通过这种方式,可以在任何级别和控制器之间使用HandleError来处理此类错误.