0

这是我的场景。我在不同的 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" }
            );
4

1 回答 1

0

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

您要么需要添加额外的识别信息:“url:”controller1/{controller}/{action}/{id}“”,要么可能创建另一个充当代理的控制器(扩展您想要优先使用的控制器并添加第二个控制器的额外缺失方法):

新控制器:Site1.Controllers.Controller

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

于 2013-10-25T23:06:04.520 回答