这是我的情景。在不同的MVC项目中,我有两个具有相同名称的控制器。每个控制器可以包含相同的操作(相同的名称),但也可以包含不同的操作(未在其他控制器中指定)。 我已经注册了两条路由,每条路由都有自己的命名空间。
当我浏览“Controller / Action1”页面时,这没关系。 当我浏览到“Controller / ActionInSecondController”(操作不在第一个控制器中)时,它会抛出404.
是否有可能以及如何调用第二个控制器的动作方法?
(注意:我添加了一个引用的第二个项目,它的dll被编译到相同的bin文件夹位置)。
我的路线定义:
routes.MapRoute(
name: "Default1",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[]{ "Site1.Controllers" }
);
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[]{ "Site2.Controllers" }
);
答案 0 :(得分:0)
不要认为这是可能的,因为它总会在它找到的第一个控制器/路径中寻找动作。
您需要添加额外的识别信息:“url:”controller1 / {controller} / {action} / {id}“”, 或者可能创建另一个充当代理的控制器(扩展您想要优先考虑的控制器并从第二个控制器添加额外的丢失方法):
NewController:Site1.Controllers.Controller
或者您甚至可以使用反射并创建一个控制器,根据传递的参数为您解析逻辑。