• C# MVC 中自定义权限特性[Authorize]中对于Ajax访问的处理


    在MVC中定义自己的权限特性。

    下例中是简单的登录判断,登录信息存与Session中,如果Session中没有登录信息,那么就不通过。

    在处理无权限的时候,判断当前请求是否为Ajax请求,如果是Ajax请求,返回Json {state=-1,msg="请登录"},如过不是Ajax请求那么就直接重定向到登录页面。

    /// <summary>
    /// 授权特性
    /// </summary>
    public class MyAuthorizeAttribute : AuthorizeAttribute
    {
        string errcode = null;
    
        /// <summary>
        /// 授权核心
        /// </summary>
        /// <param name="httpContext"></param>
        /// <returns></returns>
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var loginInfo = httpContext.Session["login"];
            if (loginInfo == null)
            {
                errcode = "NotLoggedIn";
                return false;
            }
            // 登录用户信息
            UserIdentity userIdentity = new UserIdentity((AdminInfo)loginInfo);
            httpContext.User = new UserPrincipal(userIdentity);
    
            return true;
        }
    
        /// <summary>
        /// 处理无权限请求
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            // 没有登录
            if (errcode == "NotLoggedIn")
            {
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
                    filterContext.Result = new JsonResult
                    {
                        ContentEncoding = System.Text.Encoding.UTF8,
                        ContentType = "application/json",
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        Data = new { state = -1, msg = "请重新登录" },
                    };
                }
                else
                {
                    filterContext.Result = new RedirectResult("/Account/Login");
                }
            }
            return;
        }
    }
  • 相关阅读:
    python中写一个求阶乘的函数
    python中filter关键字
    python中写一个求阶乘的函数
    python中如何获取函数文档
    python中lambda关键字创建匿名函数
    固态硬盘中m.2、sata、nvme、ahci、pcie是什么?
    python中lambda关键字定义匿名函数
    python中实现实参可选
    python中map()内置函数
    python中将实参变成可选的
  • 原文地址:https://www.cnblogs.com/childking/p/12761017.html
Copyright © 2020-2023  润新知