我在ASP.NET 4.5上使用MVC5
我想调试特定的Controller Actions而不运行整个应用程序,我需要知道如何导航到特定的Action,除了花费很多时间,因为我有很多代码需要重构和测试。
我已经考虑了单元测试,但使用调试器似乎更适合我正在做的事情。
此外,我在行动代码中也有会话变量。
我最接近解决方案的是在家中有一个包装动作即:
public ActionResult Tx()
{
return new MyApp.Areas.Area1.Controllers.OrderController().Index();
}
然后我会将相关的命名空间,控制器和动作与任何相关的参数复制并粘贴到" Tx"动作。
这确实调用了相关的Action,而我无需导航到特定的Action。我只是打电话给Home / Tx。但是我的Session变量代码出现了null异常错误:
Session["OrderID"]=null
调试Action,当我直接从应用程序导航时,Session变量可以正常工作。当我使用Home / Tx时,它仍然在Dev Web Server和Debug过程中,但也许我在新的上下文中,因为另一个Action正在创建Controller。
1)知道为什么我的想法不适用于Session变量吗?
2)如果有人对如何调用特定的控制器动作有更好的了解,那么我将不胜感激。
感谢。
答案 0 :(得分:1)
在使用之前,您需要在控制器上调用Initialize方法。尝试类似:
var httpContext = new HttpContextWrapper(HttpContext.Current);
var routeData = RouteTable.Routes.GetRouteData(httpContext);
var controller = new MyApp.Areas.Area1.Controllers.OrderController();
controller.Initialize(new RequestContext(httpContext, routeData));
return controller.Index();