您好我有以下过滤器属性,可以控制角色授权:
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的任何线索?
答案 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} };