如何将Controller上的未授权Ajax请求重定向到登录页面? 。

时间:2013-03-14 07:30:37

标签: asp.net asp.net-mvc-3 asp.net-mvc-4

[Authorize]
public class MyController : BaseController
{
    [PermissionAuthorize]
    public ActionResult GridData()
    {
        return Json(data, JsonRequestBehavior.AllowGet);
    }
}

我为特定操作的用户检查权限创建了PermissionAuthoize属性。 我遇到问题用户会话或故障单在此时间到期后如果用户向Controller发送ajax requrest,则Authorize属性拒绝该请求并以html登录表单的形式返回给user.this region用户认为应用程序未执行。它显示了对用户的不良影响。

所以,如果他们在票证过期时发送ajax请求,我想重定向到用户登录页面。

我可以为控制器创建另一个授权属性吗?

2 个答案:

答案 0 :(得分:5)

您需要做的第一件事是配置表单身份验证模块,以便在抛出401时停止重定向到登录页面。 Phil Haack写了一篇关于如何实现这一目标的nice article

一旦这样做,您将能够在客户端上捕获401 HTTP状态代码。因此,您可以编写一个global ajax handler,当从服务器发送401状态代码时,该{{3}}将重定向到登录页面(这将在表单身份验证票证到期或用户未经过身份验证时发生):

$(document).ajaxError(function(event, jqxhr, settings, exception) {
    if (jqxhr.status == 401) {
        // unauthorized
        window.location.href = '/logon';
    }
});

答案 1 :(得分:3)

以下代码可能会对您有所帮助:

$.ajax({
    url: 'url',    
    statusCode: {
        404: function() {
            //page not found
        },
        200: function() {
            //ok, do your stuff
        },
        302: function() {
            //redirect - check if url contains login and do redirect            
        }
    }
})

基本上,您只能检查重定向并在success/error回调中执行常规操作,但是当您重定向http标头时,将window.location.href更改为所需的登录页面