我有一个MVC 4(目前无论如何)网站,我想提供给许多客户。 我认为我有聪明的想法,会创建自定义控制器,然后根据参数或其他东西选择使用哪个。
每个客户都有自己的安装,因此应该在编译时选择要使用的控制器,而不是理想的运行时间。
所以我的想法是为每个客户创建一个控制器,例如Customer1Controller
,Customer2Controller
等,然后将其映射,以便所有客户都使用http://myserver/Customer
。
我尝试将所有Customer/{action}
映射到Customer1/{action}
,但无论如何我无法在一个语句中映射所有操作,并且每个操作都有一个操作看起来有点难看。
我的第一个想法是尝试使用依赖注入,但由于具体类用于控制器,显然不是一种选择。它还有其他一些缺点。
实际问题是;无论如何要做一个"赶上所有"行动?像这样:
routes.MapRoute(
name: "Import",
url: "Customer/*/{id}",
defaults: new { controller = "Customer1", action = *, id = UrlParameter.Optional }
);
Thanks./H
答案 0 :(得分:2)
实际问题是;无论如何要做一个"赶上所有"行动?
是。默认路由有一个很好的例子。
routes.MapRoute(
name: "Import",
url: "Customer/{action}/{id}",
defaults: new { controller = "Customer1", id = UrlParameter.Optional }
);
这将使用URL中的操作名称构建路由值字典,因此它可以是" Customer1"控制器。
那就是说,你的问题不清楚。控制器是动态的。除非您对每个客户控制器采取截然不同的操作,否则您无需为每个客户制作控制器。
或者,如果您要执行的操作是允许客户创建自己的网址,则可以使用custom RouteBase subclass来完成此操作。
最重要的是,有许多方法可以自定义网址,但它们不涉及注入"动态控制器",它们利用路由来动态地将请求发送到特定的控制器操作。