0

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

为此,我将在不同的命名空间上创建控制器,例如 MyApp.Controllers.v1_0.AccountsController 和 MyApp.Controllers.v1_1.AccountsController

显然,当我创建它们并尝试访问一个操作时,我得到“找到与名为'Accounts'的控制器匹配的多种类型”

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

此外,我不能只是将控制器命名为不同的(Accounts1_0Controller、Accounts1_1Controller),因为当激活器返回 Accounts1_0Controller 时,它会说它的名称不是“Accounts”......它的名称可能是 Accounts1_0。

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

  1. 从 url 设置命名空间?这样我就有了 url /v1_0/SomeAction 或 /v1_1/SomeAction 并在适当的命名空间中搜索控制器
  2. 有多个具有相同 MVC 名称但类名不同的控制器?

希望问题足够清楚。

谢谢!

4

1 回答 1

0

修复了它实现我自己的 IHttpControllerSelector。微软如何将 MVC4 开源,这很棒,几乎可以轻松地查看他们的 System.Web.Http.Dispatcher.DefaultHttpControllerSelector。

于 2012-09-16T23:05:41.850 回答