如何解决如何将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 举报,一经查实,本站将立刻删除。