asp.net-mvc - MVC 路由 - 如果 Controller 不存在,如何跳过路由规则?

标签 asp.net-mvc vb.net asp.net-mvc-routing

我希望能够拥有不绑定(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/

相关文章:

c# - 当 Content-Type 为 text/plain 时,如何让 .NET MVC 绑定(bind) POST 参数

vb.net - vb.net 中的 if 运算符出错

json - 发送 JSON 内容类型的 POST 请求并在 VB.NET 中显示 JSON 响应

vb.net - 我为什么得到“对象引用未设置为对象的实例。”但没有涉及任何代码行吗?

c# - Post 方法在 ASP.NET Core 中不起作用

c# - 如何在 Razor 中定义方法?

asp.net - 在 Umbraco 和 Orchard ASP.NET CMS 之间做出决定

c# - 如何在 if 语句中关闭/重新打开标签

c# - 为什么这个 webapi2 属性路由不起作用?

c# - ASP.Net MVC - "Cannot Create Instance of an Interface"