从零开始写C# MVC框架之--- 定义基类控制器、实现全局异常捕获

定义基类控制器的好处:把一些公用的信息抽象出来供继承的子类使用,如:公用异常捕获方法,登录信息失效后的重定向跳转等等。


定义BaseController和BaseAdminController,BaseAdminController继承BaseController

1、BaseController 作用:重写异常捕获方法

        /// <summary>
        /// 异常时处理
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnException(ExceptionContext filterContext)
        {
            string msg = filterContext.Exception.Message;
            if (!(filterContext.Exception is ZyException))
            {
                var controllerName = filterContext.RouteData.Values["controller"].ToString();
                var actionName = filterContext.RouteData.Values["action"].ToString();
                var areaName = filterContext.RouteData.DataTokens["area"];
                var erroMsg = string.Format("页面未捕获的异常:Area:{0},Controller:{1},Action:{2}", areaName, controllerName, actionName);
                Log.Error(erroMsg, filterContext.Exception);
                msg = "系统内部异常";
            }
            else
                Log.Info("", filterContext.Exception);

            //将状态码更新为200,否则在Web.config中配置了CustomerError后,Ajax会返回500错误导致页面不能正确显示错误信息
            filterContext.HttpContext.Response.StatusCode = 200;
            filterContext.ExceptionHandled = true;
        }

2、BaseAdminController 作用:定义后台 用户信息 、登录失效后的跳转

    /// <summary>
    /// 后台控制器
    /// </summary>
    public class BaseAdminController : BaseController
    {
        /// <summary>
        /// 当前用户信息
        /// </summary>
        public Zy.Xn.Model.System.User CurrentUser
        {
            get
            {
                var user = (User)Session[CacheKeys.User_Info_Cache_Key];
                return user;
            }
        }


        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            //不能应用在子方法上
            if (filterContext.IsChildAction)
                return;

            if (CurrentUser == null)
            {
                if (Core.Helper.WebHelper.IsAjax())
                {
                    filterContext.Result = Json(new { success = false, msg = "登录超时,请重新登录!" });
                    return;
                }
                else
                {
                    var result = RedirectToAction("Redirect", "Login", new { area = "admin" });
                    filterContext.Result = result;
                    return;
                    //跳转到登录页
                }
            }
        }
    }

 

后台Web项目如;菜单、角色等基础 BaseAdminController ,就可以使用其中的功能了,非常方便


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值