我希望得到一个动作结果的“价值”。 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
}
答案 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/
中看到了一个修改输出流的例子(像你所说的“值”)