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

我创建了 PermissionAuthoize 属性来检查用户对特定操作的权限。我有一个问题在用户会话或票证到期后,如果用户向控制器发送 ajax 请求,则授权属性拒绝请求并作为 html 登录表单返回给用户。该区域用户认为应用程序没有执行。它显示了对用户的不良影响。

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

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

4

2 回答 2

5

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

完成此操作后,您将能够在客户端上捕获 401 HTTP 状态代码。因此,您可以编写一个global ajax handler在从服务器发送 401 状态代码时重定向到登录页面的代码(当表单身份验证票证过期或用户根本未经过身份验证时会发生这种情况):

$(document).ajaxError(function(event, jqxhr, settings, exception) {
    if (jqxhr.status == 401) {
        // unauthorized
        window.location.href = '/logon';
    }
});
于 2013-03-14T07:47:42.370 回答
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 更改为所需的登录页面

于 2013-03-14T07:44:54.873 回答