微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将Json ActionResult转换成字符串

如何解决如何将Json ActionResult转换成字符串

| 我有一个类似下面的Controller方法(我不想更改):
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);
    }
}
所以我想知道如何使用actionURL调用UserController的GetData来分配userDataInString     

解决方法

        最好的选择是重构代码,以将GetData()中的当前逻辑转换为它自己的函数,将Json作为Json从该逻辑返回到当前GetData,然后在新的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()方法将其返回,因为我相信它将进一步第二次对其进行序列化。因此,在这种情况下,我将其作为纯字符串返回。这是您要找的东西吗?     ,        使用辅助方法从控制器执行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请求。 Cookie的Json
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\"];
        //...
     }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。