Authorize attribute and jquery AJAX in asp.net MVC

在MVC中的控制器通过ajax的方式调用时权限的问题。

只写主要部分

按照错误方式处理

派生AuthorizeAttribute的类方法:

  protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest()) //ajax调用方式
            {
                filterContext.Result = new ContentResult();
                filterContext.HttpContext.Response.StatusCode = Convert.ToInt32(System.Net.HttpStatusCode.Forbidden);

            }
            else
            {
                filterContext.Result = new RedirectResult("/Account/LogOff");
            }
}

客户端的代码

 $.ajax({
                type: "GET",
                url: "/Test/Test",
                async: false,
                global: false,
                data: {name:"sss"},
                cache: false,
                success: function (data, textStatus, jqXHR) {
                    $(outlookbarOpts.workspace).html(data);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    if (jqXHR.status == 403) { //此处判断StatusCode然后做跳转
                        window.location.href = "/Account/LogOff";
                    } else {
                        $(outlookbarOpts.workspace).html(jqXHR.responseText);
                    }
                }
            });

按照成功方式处理

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAjaxRequest()) //ajax调用方式
            {
               filterContext.Result = new JsonResult
                {
                    Data = new {  },
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };

            }
            else
            {
                filterContext.Result = new RedirectResult("/Account/LogOff");
            }
}

客户端的代码

 $.ajax({
                type: "GET",
                url: "/Test/Test",
                async: false,
                global: false,
                data: {name:"sss"},
                cache: false,
                success: function (data, textStatus, jqXHR) {
                    //在上面的Data中添加一个属性然后在此判断data的属性是否定义然后做出不同的处理方式跳转或者显示

            });

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值