gpt4 book ai didi

asp.net-mvc - 如何在进入 Controller 操作之前从用户友好的 url 中删除不必要的信息

转载 作者:行者123 更新时间:2023-12-04 17:58:21 24 4
gpt4 key购买 nike

我们正在尝试在 ASP.NET MVC 应用程序中使用自定义路由来生成此 url:'http://example.com/Person/unnecessaryinfo-42' . “unnecessaryinfo”是 id 的名称,它将使用户可以破解 URL。下面是我们的路线图的代码。这有效,但我的 Controller 操作在 id 参数中以“unnecesaryinfo-42”结束。我可以在“unnecessaryinfo-”到达 Controller Action 之前去除它吗?

routes.MapRoute("person_id", "person/{id}",
new { controller = "Customer", action = "Details" },
new { id = @"unnecessaryinfo-\d" });

编辑:

这是我们最新的代码:
routes.MapRoute("person_id", "person/{unnecessaryinfo}-{id}",
new { controller = "Customer", action = "Details" },
new { id = @"[\d]{1,6}" });

路由章节来自 ASP.NET MVC 2 In Action (第 234 页)讨论了尽可能避免使用数据库 ID,但如果您必须使用它们,请添加附加信息以使 URL 可读。这就是我们正在尝试(未成功)做的事情。数据库 ID 目前的范围从 1 到 6 位(并且可能会随着时间的推移而增长)。

最佳答案

您的来回Darin's answer让我相信您可能有另一条正在匹配和使用的路线而不是这条路线:

routes.MapRoute("person_id", "person/{unnecessaryinfo}-{id}",
new { controller = "Customer", action = "Details" },
new { id = @"[\d]{1,6}" });

切换路由添加到 RouteCollection的顺序应该解决问题。更具体的路由应该首先添加到集合中。例如,如果您也有这条路线:
routes.MapRoute("person_login", "person/{id}",
new { controller = "Customer", action = "Details" });

它应该出现在您更具体的“person_id”路由之后,这样您的代码将如下所示:
routes.MapRoute("person_id", "person/{unnecessaryinfo}-{id}",
new { controller = "Customer", action = "Details" },
new { id = @"[\d]{1,6}" });

routes.MapRoute("person_login", "person/{id}",
new { controller = "Customer", action = "Details" });

您提供的 URL 'http://example.com/Person/unnecessaryinfo-42'将匹配两条路线,但由于您的更具体的路线首先出现,这就是将要使用的路线。当映射一个不太具体的 URL 时,它将与第一个不匹配,因此将使用第二个路由。

也就是说,确定 URL 匹配的路由可能有点棘手。值得庆幸的是,有两个非常好的选项可以帮助路由调试:
  • Phil Haack提供了一个易于实现的 URL Routing Debugger
  • Stephen WaltherBuild a Controller to Debug Your Custom Routes 中提供替代方案

  • Stephen 的解决方案可能是长期使用的最佳解决方案,但 Phil 的解决方案对于停机和脏调试来说绝对更容易实现。我将从重新排序您的路线开始,但如果这不能解决问题,请使用上述调试器之一。

    关于asp.net-mvc - 如何在进入 Controller 操作之前从用户友好的 url 中删除不必要的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990642/

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