Как получить Json ActionResult в строку - PullRequest
0 голосов
/ 01 июня 2011

У меня есть метод 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);
    }
}

, поэтому я хочу знать, как я могу вызвать GetData из UserController , используя actionURL , чтобы назначить userDataInString

Ответы [ 2 ]

0 голосов
/ 01 июня 2011

Выполнить запрос 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
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 голосов
/ 01 июня 2011

Лучше всего было бы реорганизовать ваш код, чтобы превратить текущую логику в GetData () в свою собственную функцию, вернуть Json из этого текущего GetData как Json, а затем в вашем новом MyMethod () вызвать метод re factored.и добавьте его, как вы описали.

[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 (), так как я полагаю, что он будет сериализовать его во второй раз.Так что я возвращаю это как обычную строку в этом случае.Это то, что вы искали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...