gpt4 book ai didi

采用 {ID}-{Slug} 格式的 ASP.NET MVC 路由约束

转载 作者:行者123 更新时间:2023-12-02 10:01:51 26 4
gpt4 key购买 nike

我有一条如下所示的路线,理想情况下我希望它匹配:

domain.com/layout/1-slug-is-the-name-of-the-page

        routes.MapRoute(
"Layout", // Route name
"layout/{id}-{slug}", // URL with parameters
new { controller = "Home", action = "Index"}, new {id = @"\d+$"}
);

但是当我点击该网址时,我不断收到此异常:

参数字典包含 .... 中方法“System.Web.Mvc.ActionResult Index(Int32)”的不可空类型“System.Int32”的参数“id”的空条目。

上面的路线将匹配以下内容:

domain.com/layout/1-slug 或 domain.com/layout/1-slug_permalink

似乎将 ID 与 Slug 分开的连字符引起了问题。

最佳答案

作为处理的第一步,路由模块根据声明的路由执行传入 URL 的模式匹配。这种模式匹配是急切的(因此id获取直到最后一个连字符的所有连字符,这标志着slug参数的开始)。约束(如“\d+”)在模式匹配后运行。因此,让您困惑的是急切的模式匹配将 id 设置为无效值,然后它使约束失败,这导致整体路由不匹配,因此管道继续尝试匹配传入请求到集合中的下一个路由。

解决此问题的最佳(例如,最容易理解、非欺骗)方法是将整个段作为 idAndSlug 参数进行匹配,然后在 Controller 中使用正确的正则表达式来分割该字符串返回到其 idslug 组成部分。

或者,按照 mxmissile 的建议,考虑使用斜杠。

关于采用 {ID}-{Slug} 格式的 ASP.NET MVC 路由约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2568146/

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