Asp.net MVC 自定义异常处理类

本文详细阐述了在WebUI应用中实现异常处理的过程,包括捕获、记录和响应异常情况的方法,确保用户界面的稳定性和用户体验。通过使用自定义异常处理类,实现了对异常信息的收集和错误页面的定制化呈现,同时根据不同请求类型(如Ajax请求)调整响应方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using ElegantWM.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ElegantWM.Factory;
using System.Data.SqlClient;

namespace ElegantWM.WebUI
{
    public class ExceptionHandler : HandleErrorAttribute
    {
        public static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        public override void OnException(ExceptionContext filterContext)
        {

            Exception Error = filterContext.Exception;
            while (Error.InnerException != null)
            {
                Error = Error.InnerException;
            }
            //获取出现异常的controller名和action名,用于记录
            string controllerName = (string)filterContext.RouteData.Values["controller"];
            string actionName = (string)filterContext.RouteData.Values["action"];
            string Message = Error.GetType().Name + ":" + Error.Message;//错误信息 
            string Url = HttpContext.Current.Request.RawUrl;//错误发生地址
            log.Error("URL=" + Url + ";Msg=" + Message, Error);
            filterContext.ExceptionHandled = true;
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.Result = new JsonResult
                {
                    Data = ResultMsg.Failure(Message),
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }
            else
            {
                //定义一个HandErrorInfo,用于Error页使用
                HandleErrorInfo model = new HandleErrorInfo(Error, controllerName, actionName);
                //ViewResult是ActionResult,经常出现在controller中action方法return后面,但是出现形式是View()
                ViewResult result = new ViewResult
                {
                    ViewName = this.View,
                    MasterName = this.Master,
                    //定义ViewData,使用的是泛型
                    ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
                    TempData = filterContext.Controller.TempData
                };
                filterContext.Result = result;
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = 500;
                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            }
            base.OnException(filterContext);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值