1

嗨,我有以下过滤器属性,可以实现控制器角色授权:

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 的任何线索?

4

1 回答 1

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} };
于 2013-07-13T14:25:41.697 回答