Asp.net mvc 不同名称空间中的两个控制器,每个控制器中的操作不同

Asp.net mvc 不同名称空间中的两个控制器,每个控制器中的操作不同,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc Routing,这是我的设想。我在不同的MVC项目中有两个同名的控制器。每个控制器可以包含相同的操作(相同的名称),但也可以包含不同的操作(未在其他控制器中指定)。 我已经注册了两个路由,每个路由都有自己的名称空间 当我浏览到“控制器/操作1”页面时,这是确定的。 当我浏览到“Controller/actionUnsecondController”(该操作不在第一个控制器中)时,它抛出一个404 是否可能以及如何能够调用第二个控制器的动作方法 (注意:我在第二个项目中添加了一个引用,它的dll被编译到同一个bi

这是我的设想。我在不同的MVC项目中有两个同名的控制器。每个控制器可以包含相同的操作(相同的名称),但也可以包含不同的操作(未在其他控制器中指定)。 我已经注册了两个路由,每个路由都有自己的名称空间

当我浏览到“控制器/操作1”页面时,这是确定的。 当我浏览到“Controller/actionUnsecondController”(该操作不在第一个控制器中)时,它抛出一个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" }
            );

不要认为这是可能的,因为它总是在找到的第一个控制器/路由中查找操作

您需要添加额外的标识信息:“url:“controller1/{controller}/{action}/{id}”“, 或者可能创建另一个充当代理的控制器(扩展要优先选择的控制器,并从第二个控制器添加额外缺少的方法):

NewController:Site1.Controllers.Controller


或者,您甚至可以使用反射并创建一个控制器,该控制器根据传递的参数为您解析逻辑。

如果包含路由定义代码,并精简控制器类的版本,则更容易破译。两个项目中的两条路由相同。这完全取决于接受web请求的项目。所有请求都将发送到第一个。两条路由都按顺序位于Site1的routeconfig中。这个项目只是一个赤裸裸的空项目,我正试图得到一个概念证明。我需要的行为是,如果Site1的控制器不包含该操作,则调用Site2的操作。这不能仅通过路由来完成。也许会有帮助:谢谢安德烈。古巴尔。从某种意义上说,这确实有帮助,因为它确认了我需要通过自定义控制器工厂来完成它。我将接受这一答案,因为默认路由机制“不可能”。完成此操作的最佳方法是创建一个自定义控制器工厂,并返回具有所需操作的控制器。我不想创建更多的路由和重定向等。。。