0

ResponseRedirect を返すコントローラー関数を作成して、代わりにその ResponseRedirect を Json オブジェクトとして返すにはどうすればよいですか?

私はこのようなことをしたい

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

私のjsonobjectでリダイレクトURLを取得するには。

4

2 に答える 2

7

このようにする

return Json(data, JsonRequestBehavior.AllowGet);

説明 : 関数は、ActionResult によって継承される JsonResult の型を返します。

  1. JsonRequestBehavior.AllowGet:
    From this Answer why-is-jsonrequestbehavior-needed

これは、HTTP GET を使用してデータを返す JSON リクエストによる非常に特殊な攻撃から保護するためです。

基本的に、アクション メソッドが機密データを返さない場合は、安全に get を許可する必要があります。

ただし、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" });

実際の URL をすぐに返すのではなく、コントローラ アクションを呼び出すメソッドによって評価されるをRedirectToAction(...)返すことに注意してください。RedirectToRouteResult

于 2013-02-26T12:15:55.667 に答える