我希望能够拥有不绑定(bind)到 Controller 的自定义页面。这些自定义页面将全部路由到默认 Controller 。然后还有其他非自定义页面,它们的 Controller 类设置正常。我无法让路由规则适用于这两种情况。
我有如下所示的路由规则:
routes.MapRoute( _
name:="Default", _
url:="{controller}/{action}", _
defaults:=New With {.controller = "Home", .action = "Index"} _
)
routes.MapRoute( _
name:="Custom Page", _
url:="{name}", _
defaults:=New With {.controller = "Page", .action = "Index"} _
)
这种情况适用于静态 Controller ,但不适用于自定义页面。它总是试图找到具有不存在的自定义名称 (url:="{name}") 的 Controller ,因此我收到“找不到资源”错误。
如果我颠倒规则,则自定义页面可以正常工作,但静态页面则不能。
我知道问题是两条规则相互重叠,所以总是使用第一个规则。理想情况下,我希望能够告诉路由查找名为 X 的 Controller ,如果存在则使用它。如果不存在,则重定向到 Y Controller 并将 X 作为参数传入。现在如果 Controller 不存在,它不会继续下一个路由规则,它只是说找不到资源。
这样的事情可能吗?
最佳答案
我没有对此进行测试,但我认为您可能必须使用 {*name},基本上是一条捕获所有路由,如此答案所示 => .Net MVC Routing Catchall not working .
您还需要切换路线,以便捕获所有内容是最具体的,如下所示:
routes.MapRoute( _
name:="Custom Page", _
url:="{*name}", _
defaults:=New With {.controller = "Page", .action = "Index"} _
)
routes.MapRoute( _
name:="Default", _
url:="{controller}/{action}", _
defaults:=New With {.controller = "Home", .action = "Index"} _
)
您可能还需要使用 {*catchall} 而不是 {*name},但我不确定。
关于asp.net-mvc - MVC 路由 - 如果 Controller 不存在,如何跳过路由规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17841985/