来自JQuery的ASP.NET Core MVC Post Request但需要从Controller Action重定向

时间:2018-02-01 19:35:36

标签: jquery asp.net-core-mvc-2.0

我有ASP.NET Core 2 MVC项目。我正在使用JQuery发布一些数据来执行操作。 假设User.Identity.Name为null,我想重定向到AccountController AccessDenied操作。 我无法使用RedirectToAction(也删除了返回)。因为这可以追溯到JQuery成功/错误。

有什么解决方法吗?

IN控制器

if (string.IsNullOrEmpty(User.Identity.Name))
    return RedirectToAction(nameof(AccountController.AccessDenied), "Account");

在我的JS中

$.ajax({
        type: "POST",
        url: '/MyController/MyAction',
        dataType: "json",
        data: $(this).serialize(),
        success: function (data, status, xhr) {

        },
        error: function (xhr, status, err) {
            errorAlert(xhr.responseText, "ERROR");
        }
    });

2 个答案:

答案 0 :(得分:1)

当服务器响应被拒绝访问时,让Ajax错误函数重定向。

error: function (xhr, status, err) {
    if(xhr.status==401) {
        window.location.replace('@Url.Action("AccessDenied", "Account")');
    } else {
        errorAlert(xhr.responseText, "ERROR");
    };
}

从控制器返回http错误401,以便它将在客户端触发Ajax函数错误。

return Unauthorized();

答案 1 :(得分:1)

所以这是交易当你做一个ajax调用它需要一个返回值,因此你不能重定向来自服务器端的ajax调用但你可以做一件事你可以发送url作为要重定向的字符串,然后从客户端重定向,即

if (string.IsNullOrEmpty(User.Identity.Name))
    return "YourController/YourAction/ParamifAny";

并在控制器端

$.ajax({
        type: "POST",
        url: '/MyController/MyAction',
        dataType: "json",
        data: $(this).serialize(),
        success: function (data, status, xhr) {
         window.location.href = data
        },
        error: function (xhr, status, err) {
            errorAlert(xhr.responseText, "ERROR");
        }
    });