ASP.NET MVC 4 ajax角色基础授权返回错误500

时间:2013-07-13 14:22:55

标签: jquery asp.net-mvc-4 custom-action-filter

您好我有以下过滤器属性,可以控制角色授权:

public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);

            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                // For AJAX requests
                // returninr sample error that need to be catch on ajax success
                filterContext.Result = new JsonResult { Data= new { errorMessage="Access Blocked!!."} };
            }
            else
            {
                if (filterContext.Result is HttpUnauthorizedResult)
                {
                    filterContext.Result = new RedirectResult("~/Account/UnauthorizedRole");
                }
            }


        }
    }

在我的客户端ajax方面我有:

$.ajax({
                url: url,
                context: document.body,
                success: function (data) {

                    $('#imgloading').remove();

                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert('error');
                }
            });

它总是生成错误,错误是500.所以我不知道我做错了什么,因为我只想获取Data.errorMessage并在警报窗口中显示它。

我为什么会收到服务器错误500的任何线索?

1 个答案:

答案 0 :(得分:1)

首先,当您调试时,您是否可以验证是否正在调用此过滤器并且它是否会到达此行?

filterContext.Result = new JsonResult { Data= new { errorMessage="Access Blocked!!."} };

如果是这样,您可以使用Firebug检查500错误的原因。 它可能与默认情况下JSONResults的GET请求被阻止有关。

您可以将JsonResult行更改为:

filterContext.Result = new JsonResult { Data= new { errorMessage="Access Blocked!!.", JsonRequestBehavior = JsonRequestBehavior.AllowGet} };