在C#mvc 4中获取ActionResult的值

时间:2014-01-20 21:32:15

标签: c# asp.net-mvc asp.net-mvc-4

我希望得到一个动作结果的“价值”。 actionresult可以是contentresult,jsonresult或任何其他类型的actionresult。

我目前对ActionResult的理解是,它会在发送回客户端时转换为字符串。

e.g。内容(“test”)=包含测试的简单字符串

JSon(object)=表示JSon格式的对象的字符串

修改 所以任何Result都会被转换为一个字符串 - 我想得到这个字符串,所以我可以操纵它并返回这个被操纵的值。

注意: 我目前正在尝试编写一个“框架”,自动加密和解密客户端和服务器之间的数据,而这个框架的用户不必处理很多加密的东西。这就是为什么我需要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
        }

2 个答案:

答案 0 :(得分:0)

在我的意见中你做错了什么,控制器应该负责返回它可能是html,xml或json的表示数据,但是如果你想从中获取数据那么你应该为此做一层,并调用该方法这两个行动。

所以你应该有代表业务逻辑的类,控制器应该与那些类对话。另外每个控制器不应该知道其他控制器,但可以参考BLL(业务逻辑)

但仍然要解决你的问题,试试

((ViewResult)ar ).ViewData.Model

答案 1 :(得分:0)

在这种情况下使用过滤器。 我在这篇文章http://arranmaclean.wordpress.com/2010/08/10/minify-html-with-net-mvc-actionfilter/

中看到了一个修改输出流的例子(像你所说的“值”)