gpt4 book ai didi

asp.net-mvc - ASP.Net MVC - 处理错误的 URL 参数

转载 作者:行者123 更新时间:2023-12-03 14:48:45 24 4
gpt4 key购买 nike

处理访问者构建自己的 URL 并将我们期望的 ID 替换为他们喜欢的任何内容的最佳方法是什么?

例如:

ASP.Net MVC - handling bad URL parameters

但是用户可以轻松地将 URL 替换为:

https://stackoverflow.com/questions/foo

我想过将每个 Controller 功能参数设为 String ,并使用 Integer.TryParse()在他们身上 - 如果通过,那么我有一个 ID 并且可以继续,否则我可以将用户重定向到未知/未找到或索引 View 。

Stack Overflow 处理得很好,我也想这样做 - 你是怎么做的,或者你有什么建议?

最佳答案

这是像您这样的路线的示例,但对数字有限制:

routes.MapRoute(
"Question",
"questions/{questionID}",
new { controller = "StackOverflow", action = "Question" },
new { questionID = @"\d+" } //Regex constraint specifying that it must be a number.
);

这里我们将 questionID 设置为至少有一个数字。这也将阻止包含除整数以外的任何内容的任何 url,并防止需要可空的 int。

注意:这不考虑大于 Int32 范围 (-2147483647 - +2147483647) 的数字。我将此作为练习留给用户解决。 :)

如果用户输入 url “questions/foo”,他们将不会命中 Question Action ,并通过它,因为它没有通过参数约束。如果需要,您可以在笼统/默认 route 进一步处理它:
routes.MapRoute(
"Catchall",
"{*catchall}", // This is a wildcard routes
new { controller = "Home", action = "Lost" }
);

这会将用户发送到 Home Controller 中的 Lost 操作。有关通配符的更多信息,请访问 here .

注意:Catchall 应该作为 LAST 路由驻留。 考虑到 ASP.NET MVC 中路由的惰性,将它放在链上意味着它将处理它下面的所有其他路由。

关于asp.net-mvc - ASP.Net MVC - 处理错误的 URL 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236349/

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