【发布时间】:2014-03-20 18:58:14
【问题描述】:
我使用的约定是,我在 /api/product/{action} 之类的 url 处有一个 web api 端点,在相应的 url api/test/product/{action} 处有一个传统的 MVC 测试页面。 Api 和 Test 有自己的命名空间,所以 api 控制器是 MyApp.Controllers.Api.ProductController 命名空间,而测试控制器是 MyApp.Controllers.Api.Test.ProductController。
这很好用,除了我需要指定命名空间以便框架知道在发出请求时使用哪个控制器,Api 或Test。所以,我有以下路线:
Dim r1 = routes.MapRoute _
(
"DefaultWebApiTest",
"api/test/{controller}/{action}",
{"MyApp.Controllers.Api.Test"}
)
Dim r2 = routes.MapHttpRoute _
(
"DefaultWebApi",
"api/{controller}/{action}"
)
但我最近需要添加一个RouteHandler,并告诉路由:
r2.RouteHandler = New HyphenatedRouteHandler <--this is causing trouble
我一这样做,就破坏了命名空间;对 /api/product/{action} 的请求曾经正确路由到 MyApp.Controllers.Api.ProductController,现在开始转到 MyApp.Controllers.Api.Test.ProductController,这是完全错误的。
我知道我可以通过更改控制器名称来避免这种情况,这样就不会发生冲突并且不需要显式命名空间,但我真的不想这样做,我想了解这里发生了什么。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-routing