2013-07-13 83 views
1

您好我有一个不为控制角色授权的伎俩以下过滤器属性:ASP.NET MVC 4 AJAX角色基础授权返回错误500

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({ 
       url: url, 
       context: document.body, 
       success: function (data) { 

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

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

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

任何线索,为什么我得到服务器错误500?

回答

1

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

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

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

你可以改变JsonResult行:

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

是该行被击中。所以它确定在服务器端。 – VAAA

+0

你知道我是否可以使用新的JsonResult添加AllowGet? – VAAA

+0

@VAAA,我编辑了答案给你一个提示。 –