• NSS_03 过滤器


    asp.net mvc3有四类过滤器:授权, 操作,结果, 异常。操行的顺序为:授权,操作,结果,异常。 

    首先看一下TempData: 数据只能经过至多一次的Controller传递, 并且每个元素至多只能被访问一次,访问以后,自动删除。一般用于临时的缓存内容或抛出错误页面时传递错误消息,所以异常信息的传递就用TempData了。

    在项目中我们只用到授权类的验证用户是否登录功能, 及异常类的错误日志记录功能。可以继承系统默认实现的抽象类AuthorizeAttribute, HandleErrorAttribute

    • 是否登录:
    public override void OnAuthorization(AuthorizationContext filterContext)
            {
                HttpContextBase context = filterContext.HttpContext;
    
                if (null == context.Session["User"])
                {
                    filterContext.Result = new RedirectResult("~/Home/ReLogin");
                }
    
                //base.OnAuthorization(filterContext);
            }
    • 异常处理
    public override void OnException(ExceptionContext filterContext)
            {
                Exception ex = filterContext.Exception;
    
                //记录日志ex.Message
                ILog log = LogManager.GetLogger("Exception");
                log.Error(ex.Message);
                log.Error(ex.StackTrace);
           TempData["errMsg"] = ex.Message;
    
                filterContext.ExceptionHandled = true;
    
                filterContext.Result = new RedirectResult("~/Home/ErrorMsg");
    
                //base.OnException(filterContext);
            }
    • 最后在相应的action中返回类似{success: false, errType: **, errMsg: TempData["errMsg"] as string},然后在客户端做相应处理, 这个方法比较笨啊, 客户端要做很多重复的工作, 很笨, 不过目前也只能想到这里了, 以后熟悉了再优化吧。
    • 针对是否登录, 因为在刷新时如果会话为空则会弹出登录框, 所以检测到未登录的情况,就刷新一下页面就可以了,如下:
    window.location.reload();

    [摘自http://msdn.microsoft.com/zh-cn/library/gg416513(v=vs.98).aspx

  • 相关阅读:
    Linux下安装Flume
    [译]MIT6.824_1.1分布式系统介绍——驱动力与挑战
    MySQL-Canal-Kafka数据复制详解
    Linux下搭建Kafka集群
    我在创业公司的云原生之旅
    使用go向es进行数据操作脚本
    kubectl exec 向pod的文件中增加内容
    kubernetes资源导出小脚本
    面试题(四) -- 第一次当面试官
    gitlab备份检查小脚本
  • 原文地址:https://www.cnblogs.com/taotaonwsuaf/p/3212500.html
Copyright © 2020-2023  润新知