【问题标题】:Redirect ajax post action to some other actioin将 ajax 发布操作重定向到其他操作
【发布时间】:2012-05-16 11:45:36
【问题描述】:

我正在使用 ajax 发布操作。在这个操作中,我使用了HttpContext.User.Identity.Name 来获取用户 ID。根据用户 ID,我在数据库中获取与该用户 ID 相关的一些记录,并通过 json 类型返回该值。

有时会话已过期,在这种情况下,HttpContext.User.Identity.Name 值变为空。如果为空或 null 则会抛出异常。

所以我需要检查HttpContext.User.Identity.Name 值是否为空或为空,如果为空或为空我需要将其重定向到登录页面。

但重定向操作在 ajax 发布操作中不起作用。如何解决这个问题?

我需要授权 ajax 发布操作。任何人都可以为此提供解决方案吗?

问候,
卡提克。

【问题讨论】:

  • 我尝试了 [Authorize] 操作,但它不起作用。如果 identity = null RedirectToAction("Action", "Controller");不工作

标签: ajax asp.net-mvc redirect


【解决方案1】:

但重定向操作在 ajax 发布操作中不起作用。如何解决这个问题?

您可以从使用[Authorize] 属性装饰您的控制器动作开始。这样可以确保只有经过身份验证的用户才能访问它,并且保证 User.Identity.Name 内部永远不会为空:

[Authorize]
public ActionResult SomeAction()
{
    string username = User.Identity.Name; // this will never throw
    ...
    return Json(...);
}

然后看看 Phil Haack 的 following blog post。在其帖子中,Phil 提供了一个不错的插件,允许您将 ASP.NET 配置为在对受保护操作发出 AJAX 请求时发送 401 HTTP 状态代码。因此,在您的 jQuery 代码中,您可以很容易地检测到这种情况并重定向:

$.ajax({
    url: '/SomeAction',
    type: 'POST',
    statusCode: {
        200: function (data) {
            alert('200: Authenticated');
            // Bind the JSON data to the UI
        },
        401: function (data) {
            // the user is not authenticated => redirect him to the login page
            window.location.href = '/login';
        }
    }
});

当然,为了避免在所有 AJAX 请求中写入此 401 条件,您可以非常轻松地使用全局 .ajaxError() 处理程序来集中处理所有 AJAX 请求的重定向逻辑,以防服务器返回 401 状态代码:

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

现在您的 AJAX 请求变得非常标准:

$.ajax({
    url: '/SomeAction',
    type: 'POST',
    success: function(data) {
        // do something with the data returned by the action
    }
});

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    相关资源
    最近更新 更多