2011-05-31 32 views
0

我有一個像下面一個控制器方法(我不想改變):如何獲得的Json的ActionResult成字符串

public class UserController : Controller 
{ 

    public ActionResult GetData(......) 
    { 

     var returnData = ...... 

     ........................ 
     ........................ 

     return Json(returnData, JsonRequestBehavior.AllowGet); 
    } 
} 

現在我想調用不同控制器的方法,這上面的方法&希望得到這個JSON數據爲了某種目的..

public class UtilityController : Controller 
{ 

    public ActionResult MyMethod(......) 
    { 

     string actionURL = "/User/GetData/123"; 

     string userDataInString = **???????????????????** 

     userDataInString = userDataInString + "........................."; 

     return Json(userDataInString , JsonRequestBehavior.AllowGet); 
    } 
} 

,所以我想知道我怎麼能叫使用的GetData的 UserController的 actionURL來分配userDataInString

+0

你能在這個語言代碼的編寫? – Pradeep 2011-05-31 21:06:10

+0

c#,mvc3,.net4.0 – Arun 2011-06-01 00:14:14

回答

0

你最好的選擇將是重構代碼,以使的GetData()到它自己的功能,目前的邏輯,從返回的Json到當前的GetData爲JSON,然後在您的新的MyMethod()調用重新考慮的方法並按照你所描述的方法追加它。

[NonAction]  
public ActionResult RefactoredGetData(...) 
{ 
    .............. 
    .............. 
} 

public ActionResult GetData(...) 
{ 
    var returnData = RefactoredGetData(...) 
    return Json(returnData, JsonRequestBehavior.AllowGet); 
} 

public string MyMethod(...) 
{ 
    string actionURL = "/User/GetData/123"; 
    string userDataInString = new JavaScriptSerializer().Serialize(RefactoredGetData(...)); 
    userDataInString = userDataInString + "........................."; 
    return userDataInString; 
} 

注意,因爲串行器返回的JSON數據已經不能用JSON()方法返回它,因爲我相信這將進一步序列化它第二次。所以我在這種情況下以純字符串的形式返回它。這是你在找什麼?

+0

我不能使用這種方法,因爲我不想改變原來的getdata方法或它的控制器,因爲我已經在一個簡單的例子中寫了我的問題,但實際上這個getdata是寫在各種控制器因爲它被一個用戶控件調用,它可以在N個地方存在,謝謝你的回答。 – Arun 2011-06-01 00:08:47

0

用輔助方法從控制器執行GET請求。

public ActionResult MyMethod(......) 
    { 

    string controller = "UserController"; 
    string action = "GetData"; 
    string query = "123"; 
    string address = Request.Url.GetLeftPart(System.UriPartial.Authority) + Url.Action(action, controller) + "/" + query; 

    string userDataInString = GetRequest(address);//address in place of actionUrl 
    userDataInString += "........."; 
    return Json(userDataInString , JsonRequestBehavior.AllowGet); 
    } 

     private string GetRequest(string address) 
     { 
       WebClient client = new WebClient();//pick your poisen... 
       return client.DownloadString (address); 
     } 

除非你有一個很好的理由使用RESTful方式...如果你有要求的兩端的控制,我建議你進入一個BL這個以節省HTTP請求。


的JSON的Cookie

private void GetRequestCreateCookie(string address) 
{ 
    var myCookie = new HttpCookie("aCookie");   
    var client = new WebClient(); 
    myCookie["jsonResponse"] = client.DownloadString(address); 
    myCookie.Expires = DateTime.Now.AddMinutes(1);//some amt of time  

    // Add the cookie. 
    Response.Cookies.Add(myCookie);    
} 

閱讀(檢查空在真正的應用程序).​​..

[HttpPost] 
    public ActionResult SomeMethod(/*param(s)*/) 
    { 
     HttpCookie cookie = Request.Cookies["aCookie"]; 
     string answer = cookie["jsonResponse"]; 
     //... 
    } 
+0

它看起來適合我的問題,讓我試試這個..謝謝。 – Arun 2011-06-01 00:13:23

+0

如何在Cookie中設置GetRequest()? – Arun 2011-06-01 02:42:20

+0

@Arun更新了答案以反映第二個問題。 – 2011-06-01 14:46:40