MVC框架 - 异常处理

在ASP.NET中,错误处理是通过使用标准的尝试捕捉方法或使用应用程序事件。ASP.NET MVC附带内置支持,被称为异常过滤器功能异常处理。在这里我们要学习两种方法:一个是定义HandleError过滤器,另一个是重写onException方法。

覆盖onException方法

使用这种方式在当要处理整个操作方法所有的异常在控制器级别。

要理解这种方式,创建一个MVC应用程序(包括跟随在前面章节中的步骤)。现在添加一个新的控制器类,并添加以下代码将覆盖onException方法,并明确在行动方法抛出一个错误:

mvc_exception_handling

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

mvc_error_handling

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

mvc_exception_common_view

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

mvc_common_exception_handling

这种方法的优点是,在同一个控制器中的多个动作可以共享这个错误处理逻辑。 但是,缺点是不能跨越多个控制器使用相同的错误处理逻辑。

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(); } } }

如果尝试现在运行的应用程序,会得到类似如下的错误:

mvc_exception

正如所看到的,这一次的错误包含了控制器和动作细节相关的更多信息。以这种方式,HandleError可用于在任何级别和跨控制器处理这样的错误。




转载于:https://www.cnblogs.com/hbai/p/4880998.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值