映射以特定 URL 部分/关键字开头的所有路线

Map all routes that start with a specific URL part / keyword

我正在为我的个人图书馆的各种单元测试建立一个测试中心,我希望有一个易于访问的测试路径 API。所以我的路由配置中有两个条目:默认路由和自定义路由...

routes.MapRoute(
            name:="Default",
            url:="{controller} / {Action} / {id}",
            defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
        )

        routes.MapHttpRoute(
                name:="UnitTests",
                routeTemplate:="test/{category}/{testname}",
                defaults:=New With {.controller = "TestApis", .action = "testme",
                .category = "TestCategoryOne", .testname = UrlParameter.Optional}
            )

我的想法是,每当我想调用我的测试 API 控制器时,我只需在 URL 前面加上 "test/",它就会知道重定向它到我的 "TestApisController" 。 . .但它似乎破坏了我的默认路线。

问题

有没有一种方法可以将所有以 "test/" 开头的路由映射到特定控制器,同时 不会 破坏我的默认路由?

编辑

所以过了一段时间,我意识到这个方法不起作用的原因与路线无关。我在 "WebApiConfig" 文件中定义了另一个默认 API 路由,这导致了一些问题。抱歉,我仍在从 Webforms 过渡到 MVC。

由于您尝试路由到的控制器是 Web Api 控制器,因此您需要将自定义路由放在 WebApiConfig.vb 文件中。正如@Stephen Muecke 指出的那样,路由应该高于该文件中的默认路由,因为它比默认路由更具体。您的原始代码会稍作更改,而不是 routes.MapHttpRoute 您将拥有 config.Routes.MapHttpRoute,如下所示:

config.Routes.MapHttpRoute( _
    name:="UnitTests", _
    routeTemplate:="test/{category}/{testname}", _
    defaults:=New With {.controller = "TestApis", .action = "testme", .category = "TestCategoryOne", .testname = UrlParameter.Optional}
)

当我想在某些情况下路由到特定控制器并且还在路由中包含自定义身份验证处理程序时,我也做过同样的事情,您尝试做的应该有效。