我在ASP.NET 4.6.1上的ASP.NET 4.5上使用ASP.NET MVC 5.
我有两个控制器:
FooController
FooIndexController
这是因为Foo
的索引操作很复杂,所以我觉得它们更适合自己独立的Controller
类。
我使用基于属性的路由。我的ASP.NET MVC版本在Order
上有RouteAttribute
属性。
我有这些行动:
class FooController {
// Returns a view to allow editing of the Foo entity
[HttpGet]
[Route("~/{tenant}/foo/{fooName}", Order=2)]
public ActionResult Edit(String fooName, FooViewModel model) {
...
}
}
class FooIndexController {
// Returns a CSV file download listing all of the Foo entities
[HttpPost]
[Route("~/{tenant}/foo/csv", Order=1)]
public ActionResult IndexCsv() {
...
}
}
因此,虽然资源路径bar/foo/csv
将匹配两个路径模板,但我已为Order=1
操作指定了显式IndexCsv
,因此它应与该操作的路由匹配,并且完成它,但我仍然得到这个黄色的死亡屏幕:
找到了与URL匹配的多种控制器类型。如果多个控制器上的属性路由与请求的URL匹配,则会发生这种情况。
请求已找到以下匹配的控制器类型: MyProject.FooController MyProject.FooIndexController
为什么忽视Order
属性?
我没有在控制器上使用[RoutePrefix]
或任何其他属性。
更新:
我使用Phil Haack的路由调试器运行,奇怪的是它说POST bar/foo/csv
除了n/a
和{*catchall}
之外没有匹配任何路由而GET bar/foo/123
没有& #39; t匹配Edit
的路由(尽管调用了操作) - 我想知道这个次要问题是否是路由调试器中的错误。
UPDATE2 :
我也没有使用基于全局/会议的路由。它是100%基于属性的路由。