2014-01-20 4 views
1

Я хочу получить значение «значение» для actionresult. actionresult может быть contentresult, jsonresult или любой другой тип actionresult.Получить значение ActionResult в C# mvc 4

Мое настоящее понимание ActionResult заключается в том, что оно будет преобразовано в строку при отправке обратно клиенту.

например. Содержание («тест») = простая строка, которая содержит тест

JSon (объект) = строку, представляющую объект в формате JSon

EDIT: так что любой результат будет преобразован в строку - и я хочу получить эту строку, поэтому я могу манипулировать ею и возвращать это, манипулировать, значение.

Примечание: В настоящее время я пытаюсь написать «фреймворк», который автоматически шифрует и расшифровывает данные между клиентом и сервером, без необходимости использования этой структуры для работы с криптографическими материалами. Именно по этой причине мне нужно «значение» Actionresult, поэтому я могу зашифровать его, а затем отправить его клиенту!

Надеюсь, вы сможете понять мою проблему сейчас.

Мой текущий код выглядит следующим образом:

public ActionResult PerformChange(String action, String controller) 
     { 
      RedirectToRouteResult res = RedirectToAction(action, controller); 
      //how can i get the value of this RedirectToRouteResult? e.g. the string 


      Assembly cur = Assembly.GetExecutingAssembly(); 
      List<Type> controllers = cur.GetTypes().Where(x => x.IsSubclassOf(typeof(Controller))).ToList(); 
      List<Type> controllersWithCorrectName = controllers.Where(x => x.Name == controller).ToList<Type>(); 
      if (controllersWithCorrectName.Count != 1) 
      { 
       //return error 
       return new EmptyResult(); 
      } 
      Type targetController = controllersWithCorrectName.Single(); 
      MethodInfo[] customMethods = targetController.GetMethods().Where(x => (x.ReturnType == typeof(ActionResult) || x.ReturnType.IsSubclassOf(typeof(ActionResult))) && x.IsPublic).ToArray<MethodInfo>(); 
      List<MethodInfo> methods = customMethods.Where(x => x.Name == action).ToList<MethodInfo>(); 
      if (methods.Count != 1) 
      { 
       //return error 
       return new EmptyResult(); 
      } 
      MethodInfo targetMethodInfo = methods.Single(); 
      Controller c = (Controller)Activator.CreateInstance(targetController); 
      ActionResult ar = (ActionResult)targetMethodInfo.Invoke(c, null); 
      //or how to get rhe value with this way??? 

//perform change to extracted value 

      return null; //return changed value 
     } 
+0

Не знаете, в чем ваш вопрос. Ваш образец показывает довольно простое отражение, чтобы вызвать метод и получить результат (который, вероятно, работает). Ваш вопрос «как проверить тип объекта?» Рассмотрите возможность замены образца, который у вас есть, с образцом того, что вы пытаетесь достичь/не работает (с объяснением, что/как оно не работает). –

+0

Кажется, что вы должны использовать фильтры, но не другие действия –

ответ

0

на мой взгляд вы делаете что-то неправильно, контроллер должен нести ответственность о возвращении данных презентации он может быть HTML, XML или JSON, но если вы хотите получить данные из него тогда вы должны сделать слой для этого и вызвать этот метод в обоих действиях.

Итак, у вас должен быть класс, представляющий бизнес-логику, и контроллеры должны разговаривать с этими классами. Кроме того, каждый контроллер не должен знать о другом контроллере, но может иметь ссылку на BLL (бизнес-логики)

Но все-таки решить вашу проблему попробовать

((ViewResult)ar).ViewData.Model 
+0

Я думаю, что понимаю вашу точку зрения, и я считаю это интеллектуальным решением, но мне нужно подумать об этом, поскольку это будет означать, что я должен переписать большие части моих код и дополнительно показать моим товарищам, как программировать в этом стиле ... ваше второе предложение работает только для ViewResult! Я ищу общее решение для Actionresult, потому что я знаю, что могу извлечь переменную содержимого ContenResult, переменную Data JSonResult и т. Д., Но я бы хотел избежать большого переключения, где мне нужно было бы проверить тип результата Благодарю вас за внимание! –

Смежные вопросы