MVC路由/动态控制器

时间:2017-06-09 11:30:36

标签: c# asp.net-mvc url-routing asp.net-mvc-routing

我有一个MVC 4(目前无论如何)网站,我想提供给许多客户。 我认为我有聪明的想法,会创建自定义控制器,然后根据参数或其他东西选择使用哪个。

每个客户都有自己的安装,因此应该在编译时选择要使用的控制器,而不是理想的运行时间。

所以我的想法是为每个客户创建一个控制器,例如Customer1ControllerCustomer2Controller等,然后将其映射,以便所有客户都使用http://myserver/Customer

我尝试将所有Customer/{action}映射到Customer1/{action},但无论如何我无法在一个语句中映射所有操作,并且每个操作都有一个操作看起来有点难看。

我的第一个想法是尝试使用依赖注入,但由于具体类用于控制器,显然不是一种选择。它还有其他一些缺点。

实际问题是;无论如何要做一个"赶上所有"行动?像这样:

        routes.MapRoute(
            name: "Import",
            url: "Customer/*/{id}",
            defaults: new { controller = "Customer1", action = *, id = UrlParameter.Optional }
        );

Thanks./H

1 个答案:

答案 0 :(得分:2)

  

实际问题是;无论如何要做一个"赶上所有"行动?

是。默认路由有一个很好的例子。

    routes.MapRoute(
        name: "Import",
        url: "Customer/{action}/{id}",
        defaults: new { controller = "Customer1", id = UrlParameter.Optional }
    );

这将使用URL中的操作名称构建路由值字典,因此它可以是" Customer1"控制器。

那就是说,你的问题不清楚。控制器动态的。除非您对每个客户控制器采取截然不同的操作,否则您无需为每个客户制作控制器。

或者,如果您要执行的操作是允许客户创建自己的网址,则可以使用custom RouteBase subclass来完成此操作。

最重要的是,有许多方法可以自定义网址,但它们不涉及注入"动态控制器",它们利用路由来动态地将请求发送到特定的控制器操作。