0

如何创建一个返回 ResponseRedirect 的控制器函数,而不是将该 ResponseRedirect 作为 Json 对象返回?

我想做这样的事情

 return Json(new { url = RedirectToAction("AccountMyProducts", "Account"), redirect = "true" });

在我的 jsonobject 中获取重定向 url。

4

2 回答 2

7

这样做

return Json(data, JsonRequestBehavior.AllowGet);

解释:函数返回JsonResult的类型,由ActionResult继承。

  1. JsonRequestBehavior.AllowGet
    从这个答案 为什么需要jsonrequestbehavior-needed

这是为了防止针对使用 HTTP GET 返回数据的 JSON 请求的非常具体的攻击。

基本上,如果您的操作方法不返回敏感数据,那么允许获取应该是安全的。

但是,MVC 将其与 DenyGet 作为默认设置来保护您免受此攻击。它让您在决定通过 HTTP GET 公开数据之前考虑所公开数据的含义

如果您打算基于 json 数据进行重定向

return Json(new 
{ 
    redirectUrl = Url.Action("AccountMyProducts", "Account"), 
    isredirection= true 
});

在 Jquery 成功回调函数中,这样做

$.ajax({
.... //some other stuffs including url, type, content type. 

//then for success function. 
success: function(json) {
    if (json.isredirection) {
        window.location.href = json.redirectUrl;
    }
}

});
于 2013-02-26T11:50:32.903 回答
0

你可以试试这个:

return Json(new { url = "Account/AccountMyProducts", redirect = "true" });

值得注意的是,RedirectToAction(...)返回 aRedirectToRouteResult由调用控制器操作的方法评估,而不是立即返回实际 URL。

于 2013-02-26T12:15:55.667 回答