根据URL参数定义控制器名称空间

时间:2012-09-16 22:14:35

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我正在开发一个带有MVC4的Web API,我想让它向后兼容,因为我无法控制何时更新客户端。

为了做到这一点,我将在不同的命名空间上创建控制器,例如MyApp.Controllers.v1_0.AccountsController和MyApp.Controllers.v1_1.AccountsController

显然,当我创建它们并尝试访问某个动作时,我会发现“找到了多个匹配名为'Accounts'的控制器的类型”

然后,我尝试做的是编写我自己的IHttpControllerActivator,这样当调用Create时,它会返回其中一个......但是这不起作用b / c它永远不会被击中,这就像创建一样接收一个System.Web.Http.Controllers.HttpControllerDescriptor,其中包含有关将要使用的控制器的信息。

另外,我不能只将控制器命名为不同的(Accounts1_0Controller,Accounts1_1Controller),就像激活器返回Accounts1_0Controller时一样,它说它的名字不是“Accounts”......它的名字可能是Accounts1_0。

你有没有看到任何一种方式:

  1. 从网址设置名称空间?这样我就可以使用url / v1_0 / SomeAction或/ v1_1 / SomeAction并在控制器上搜索相应的命名空间
  2. 多个控制器具有相同的MVC名称但不同的类名?
  3. 希望问题很清楚。

    谢谢!

1 个答案:

答案 0 :(得分:0)

修正了它实现我自己的IHttpControllerSelector。微软如何制作MVC4开源,使它几乎无痛地看着他们的System.Web.Http.Dispatcher.DefaultHttpControllerSelector。