gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 捕获所有路由和默认路由

转载 作者:行者123 更新时间:2023-12-03 05:25:11 29 4
gpt4 key购买 nike

为了让我的应用程序正确生成 404 错误,我在路由表末尾实现了捕获所有路由,如下所示:

 routes.MapRoute(
"NotFound", _
"{*url}", _
New With {.controller = "Error", .action = "PageNotFound"} _
)

但是,为了使其正常工作,我必须删除默认路由:

{controller}/action/{id}

但是现在默认值已被删除,我的大多数操作链接不再起作用,我发现让它们再次工作的唯一方法是为每个 Controller /操作添加单独的路由。

是否有更简单的方法来执行此操作,而不是为每个 Controller /操作添加路由?

是否可以创建一个默认路由,如果用户尝试导航到未知路由,该默认路由仍然允许捕获所有路由工作?

最佳答案

使用路线约束

在您的情况下,您应该定义默认路由 {controller}/{action}/{id} 并对其施加约束。可能与 Controller 名称甚至操作有关。然后将 catch all 放在它后面,它应该可以正常工作。

因此,当有人请求未满足约束条件的资源时,包罗万象的路由将与该请求匹配。

所以。首先使用路由约束定义默认路由,然后在其后定义捕获所有路由:

routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new { controller = "Home|Settings|General|..." } // this is basically a regular expression
);
routes.MapRoute(
"NotFound",
"{*url}",
new { controller = "Error", action = "PageNotFound" }
);

关于asp.net-mvc - ASP.NET MVC - 捕获所有路由和默认路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4001081/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com