Asp.net mvc 使用自定义IControllerFactory实现在MVC 6中手动创建控制器
基于,我创建了自定义控制器工厂,用于基于某些逻辑实例化控制器(用于制作可插拔的体系结构) 出于测试目的,一切都是硬编码的Asp.net mvc 使用自定义IControllerFactory实现在MVC 6中手动创建控制器,asp.net-mvc,asp.net-core-mvc,Asp.net Mvc,Asp.net Core Mvc,基于,我创建了自定义控制器工厂,用于基于某些逻辑实例化控制器(用于制作可插拔的体系结构) 出于测试目的,一切都是硬编码的 var controller = Bootstrapper.GetInstance<Controller>("TestModuleApi"); actionContext.RouteData.Values["controller"] = "TestModuleApi"; actionContext.RouteData.Values["action"] = "Ge
var controller = Bootstrapper.GetInstance<Controller>("TestModuleApi");
actionContext.RouteData.Values["controller"] = "TestModuleApi";
actionContext.RouteData.Values["action"] = "Get";
var returnController = _controllerActivator.Create(actionContext, controller.GetType());
return returnController;
我还尝试了非常简单的方法,使CreateController
返回我想要的任何内容:
actionContext.RouteData.Values["controller"] = "MyApi";
actionContext.RouteData.Values["action"] = "Get";
return new MyApiController();
这里我覆盖了对CreateController
的每个调用,以返回MyApiController
实例。在这种情况下,MyApiController
继承HomeApiController
。但当我转到/api/HomeApi/Get
时,例如,我从HomeApiController
获取值,而不是MyApiController
在自定义IControllerFactory
实现中,如何实例化我们想要的任何控制器实例
更新:当我调试第一个代码时,我可以看到调用了
TestModuleApiController
的构造函数,但从未调用Get
操作。在第一个问题上,我可以看到问题与控制器的创建无关,但是控制器正在尝试返回一个不存在的视图。是的,returnController
变量具有我想要的实例,但是从未调用Get
操作。
actionContext.RouteData.Values["controller"] = "MyApi";
actionContext.RouteData.Values["action"] = "Get";
return new MyApiController();