c# - 从任意 URL 手动实例化 Controller 实例?

标签 c# asp.net asp.net-mvc routing controller

我的技能让我失望了,我知道我已经看过相关代码,但找不到它。

获取任意 URL、通过 asp.net mvc 路由系统运行它并在另一端产生对 Controller 实例的引用的最快方法是什么?

例如,代码执行在某个任意 Controller 方法中。我想做这样的事情:

...
string myURL = "http://mysite/mycontroller/myaction/myparameters";

RouteData fakeRouteData = new RouteData(Route???, IRouteHandler???)
RequestContext ctxt = new RequestContext(this.ControllerContext.HttpContext,
                                         fakeRouteData);

ControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
Controller result = factory.CreateController(ctxt, controllername???)

我正在尝试像路由系统一样获取 Controller 实例,而不管代码在何处执行。我不清楚此时如何将各个部分组合在一起。虽然我最终会发现它,但我想我可以通过在这里询问来节省时间;)

最佳答案

嗯...我不知道这是否是最好的解决方案,因为它需要模拟,但也许这会有所帮助。您走在正确的轨道上,一旦您知道要实例化什么 Controller , Controller 工厂部分就很简单,所以问题是从中获取 RouteData 对象的最快方法是什么一个任意的 url。

我知道的唯一方法是最小起订量:

string url = "~/Account/LogOn";  //trying to create Account controller in default MVC app

RouteCollection rc = new RouteCollection();
MvcApplication.RegisterRoutes(rc);
System.Web.Routing.RouteData rd = new RouteData();
var mockHttpContext = new Moq.Mock<HttpContextBase>();
var mockRequest = new Moq.Mock<HttpRequestBase>();
mockHttpContext.Setup(x => x.Request).Returns(mockRequest.Object);
mockRequest.Setup(x => x.AppRelativeCurrentExecutionFilePath).Returns(url);

RouteData routeData = rc.GetRouteData(mockHttpContext.Object);

string controllerName = routeData.Values["controller"].ToString();

IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
IController controller = factory.CreateController(this.ControllerContext.RequestContext, controllerName);

我进行了大量谷歌搜索,但没有找到与单元测试/模拟无关的内容。我不知道是否有可以快速轻松地做到这一点,但我当然想知道是否有人有更好的解决方案!

关于c# - 从任意 URL 手动实例化 Controller 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2066615/

相关文章:

c# - 如何使用 XSD.exe 从 C# 类型生成 XML 模式,以便 [XmlAttribute] 属性映射到所需的 XML 属性?

c# - .NET:ListView 蓝调?

javascript - 即使我单击“确定”,模态弹出扩展器仍保持打开状态

对 SignalR 集线器方法的 Javascript 调用不返回值

c# - .Net Reactive Extensions Framework (Rx) 是否考虑拓扑顺序?

c# - 概括需要处理不同数据成员的算法

html - 如何设置页码样式以不与自定义寻呼机中的上一行重叠

c# - 获取使用 MemoryCache 类缓存的所有缓存对象 c#

asp.net-mvc - MVC 4 : Multiple Controller action parameters

asp.net-mvc - ASP.NET MVC 的用户-组-权限用户界面设计