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

标签 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 属性来检查用户对特定操作的权限。 我有一个问题,当用户 session 或票证到期后,如果用户向 Controller 发送 ajax 请求,则授权属性会拒绝该请求并以 html 登录表单形式返回给用户。该区域用户认为应用程序未执行。它显示出对用户的不良影响。

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

我可以为 Controller 创建另一个授权属性吗?

最佳答案

您需要做的第一件事是配置表单例份验证模块,以在抛出 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';
    }
});

关于asp.net - 如何将 Controller 上未经授权的 Ajax 请求重定向到登录页面? 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15403519/

相关文章:

asp.net-mvc - 无法将javascript文件添加到cshtml

c# - Mvc4 : N tier architecture

asp.net - 如何自定义 UseExternalSignInCookie?

asp.net - ASP.net Webforms(.NET 2.0)中的异步页面处理示例

asp.net - 使用本地系统应用程序池标识时,进程仅适用于 Web 应用程序

asp.net - 如何制作<asp :Menu and <asp:DropDownList on one line?

.net - 返回没有属性名称的 Json 结果

jquery - 从 jquery 调用 MVC 操作并处理重定向或返回的部分 View

c# - 在父 View 中显示子项的验证 asp.net mvc 3

visual-studio-2010 - 升级到 MVC4 Targeting 4.0 和 VS2010,但 MS Build 仍在寻找 v11.0