我自定了一个授权过滤器,验证如果没有通过就返回到登录页面/Account/Login问题:有些操作ajax,如果没有登录,希望返回的是一个代码,比如一个整数。  该怎么做?  
webconfig
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>public class UserAuthorize : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!httpContext.Request.IsAuthenticated)                               //首要条件:必须登录,必须有身份验证票。
                return false;               string controller = httpContext.Request.RequestContext.RouteData.Values["controller"].ToString();
            string action = httpContext.Request.RequestContext.RouteData.Values["action"].ToString();            using (var db = new WEBVODEntities())
            {
                List<CtrlActRole> tempList = db.CtrlActRole.Where(a => a.ControllerName == controller && a.ActionName == action).ToList();
                if (tempList.Count == 0)                                            //如果没有找到记录,表示不需要权限控制
                    return true;                foreach (var ctrlActRole in tempList)
                {                    string roleField = ctrlActRole.RoleField;                      //获取对应的数据库字段                    RegisteredUser oldUser = CommonUtils.GetCurrentUser();
                    if (oldUser == null)
                        return false;                    var roleList = db.ExecuteStoreQuery<Role>("select top 1 * from role where " + roleField + "=1 and id={0}", oldUser.RoleId).ToList();  // 查看相应的角色,对应字段是否==true                    if (roleList.Count > 0)                                             //如果有记录,表示有权限(这个地方应该显示相应的提示,不是直接返回到登录界面)
                        return true;
                }
  
            }
            return false;
        }
    }

解决方案 »

  1.   


    找到一个答案,但是里边关于json这一段有些不明白                context.Result = new JsonResult
                    {
                        Data = new
                        {
                            Error = "NotAuthorized",
                            LogOnUrl = urlHelper.Action("Login", "Account")
                        },
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        
                    };        protected override void HandleUnauthorizedRequest(AuthorizationContext context)
            {
                if (context.HttpContext.Request.IsAjaxRequest())
                {
                    UrlHelper urlHelper = new UrlHelper(context.RequestContext);
                    context.Result = new JsonResult
                    {
                        Data = new
                        {
                            Error = "NotAuthorized",
                            LogOnUrl = urlHelper.Action("Login", "Account")
                        },
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        
                    };
                }
                else
                {
                    base.HandleUnauthorizedRequest(context);
                }
            }
      

  2.   

    你找的代码是对的。要返回数字,这里
                       new JsonResult
                    {
                        Data = 整数值,
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                         
                    };
      

  3.   

    谢谢
    问题:下边是我写的ajax,在已经登录的情况下,是正常工作的。如果没有登录,我在ajax里边该怎么判断?
                       new JsonResult
                    {
                        Data = -3,
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                         
                    };    $("#chatform").submit(function () {
            if (jQuery.trim($("#Content").val()) == "") {
                alert("评论内容不能为空"); return false;
            }
            var f = $("#chatform");
            var action = f.attr("action");
            var serializedForm = f.serialize();
            $.ajax({
                type: "Post",
                url: action,
                data: serializedForm,
                error: function (res, status, ex) { alert("发表评论失败"); },
                success: function (cms) {
                    if (cms == "-1") { alert("对不起,发表评论失败"); }
                    else { alert("评论发表成功,谢谢支持!"); $("#Content").val(""); $("#div_chatlist").html(cms); }
                }
            });
            return false;
        })
      

  4.   


    写好了,谢谢!!
            protected override void HandleUnauthorizedRequest(AuthorizationContext context)
            {
                if (context.HttpContext.Request.IsAjaxRequest())
                {
                    UrlHelper urlHelper = new UrlHelper(context.RequestContext);
                    context.Result = new JsonResult
                    {
                        Data = new
                        {
                            StatusCode = -3,
                            LogOnUrl = urlHelper.Action("Login", "Account")
                        },
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        
                    };
                }
                else
                {
                    base.HandleUnauthorizedRequest(context);
                }
            }
    function Bind_FavoSumbit() {    $("#favoriteform").submit(function () {        var f = $("#favoriteform");
            var action = f.attr("action");
            var serializedForm = f.serialize();
            $.ajax({
                type: "Post",
                url: action,
                data: serializedForm,
                error: function (res, status, ex) { alert("收藏失败"); },
                success: function (date) {
                    var cms = date.StatusCode;
                    if (cms == -3) { alert("对不起,你没有登录"); }
                    else if (cms == -1) { alert("对不起,收藏失败"); }
                    else {
                        if (cms == 11)
                        { alert("已经收藏过!"); }
                        if (cms == 2)
                        { alert("收藏成功,谢谢支持!"); }
                    }
                }
            });
            return false;
        })}