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

Lop*_*ded 15 vb.net model-view-controller url-routing visual-studio-2013 asp.net-mvc-5.2

我正在为我的个人图书馆建立一个测试中心进行各种单元测试,我希望有一个易于访问的测试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}
            )
Run Code Online (Sandbox Code Playgroud)

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

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

编辑

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

AK3*_*800 0

由于您尝试路由到的控制器是 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}
)
Run Code Online (Sandbox Code Playgroud)

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