我有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");
}
});
答案 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");
}
});