加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何从用户友好的URL中删除不必要的信息,然后才

发布时间:2020-12-16 07:15:41 所属栏目:asp.Net 来源:网络整理
导读:我们正在尝试在ASP.NET MVC应用程序中使用自定义路由来生成此URL:’http://example.com/Person/unnecessaryinfo-42′. “unwantedinfo”是id的名称,它将使用户可以破解URL.以下是我们路线图的代码.这有效但我的控制器操作最终在id参数中以“unnecesaryinfo-
我们正在尝试在ASP.NET MVC应用程序中使用自定义路由来生成此URL:’http://example.com/Person/unnecessaryinfo-42′. “unwantedinfo”是id的名称,它将使用户可以破解URL.以下是我们路线图的代码.这有效但我的控制器操作最终在id参数中以“unnecesaryinfo-42”结束.我可以在它到达控制器操作之前剥离“unwantedinfo-”吗?

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

编辑:

这是我们最新的代码:

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

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

解决方法

你在 Darin’s answer上来回让我相信你可能有另一条路线正在匹配并使用而不是这条路线:

routes.MapRoute("person_id",6}" });

将路由添加到RouteCollection的顺序切换应解决问题.应该首先将更具体的路线添加到集合中.例如,如果你也有这条路线:

routes.MapRoute("person_login",action = "Details" });

它应该出现在您更具体的“person_id”路径之后,因此您的代码将如下所示:

routes.MapRoute("person_id",6}" });

routes.MapRoute("person_login",action = "Details" });

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

那说确定URL匹配的路由可能有点棘手.值得庆幸的是,有两个很好的选项可以帮助进行路由调试:

> Phil Haack提供了一个易于实现的URL Routing Debugger
> Stephen Walther在Build a Controller to Debug Your Custom Routes提供替代品

斯蒂芬的解决方案可能是长期使用的最佳解决方案,但菲尔绝对更容易实现低调和脏调试.我将从重新排序您的路由开始,但如果这不能解决问题,请使用上述调试器之一.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读