gpt4 book ai didi

asp.net-mvc - 使用 ASP.NET MVC 处理 URL 编码参数

转载 作者:行者123 更新时间:2023-12-02 20:00:37 25 4
gpt4 key购买 nike

我的 MVC Web 应用程序生成一个可以包含任何字符(%、+、/等)的激活链接。我对字符串进行 URL 编码并生成链接:

new UrlHelper(HttpContext.Current.Request.RequestContext)
.RouteUrl("AccountActivation",
new { id = HttpContext.Current.Server.UrlEncode(activationString) };

然后添加域名,如下所示:

 http://localhost/AccountActivation/asdlkj223%25asd%2Basw3fgasdme

然后将 URL 传递给用户。

本例中的路线是:

 routes.MapRoute(
"ActivateAccount",
"AccountActivation/{id}",
new { controller = "Account", action = "Activate", id = ""});

这对我来说似乎很好,但 ASP.NET 开发服务器和 IIS 给我 HTTP 错误 400 - 错误请求。这意味着我看不到的 URL 有问题。

当去掉路线描述中的 {id} 时(我也尝试过 {*id} 但没有成功):

  routes.MapRoute(
"ActivateAccount",
"AccountActivation",
new { controller = "Account", action = "Activate"});

网址如下所示:

http://AccountActivation?id=asdlkj223%25asd%2Basw3fgasdme

而且它们工作得很好......

我认为这两种方法的作用完全相同。它们之间有什么区别?是 MVC 引擎为我执行了更多操作,还是我错过了 URL 编码的某些内容。

最佳答案

尝试UrlPathEncode而不是 UrlEncode - 某些字符在路径中是非法的,但在查询字符串中是合法的。

也就是说 - 我相信对字符是否“坏”的分析是在路径解码发生后执行的;并由 IIS 完成。它会拒绝某些字符,因为 URL 可能映射到物理文件系统,因此可能允许用户访问他们实际上不应该访问的内容。同样,这样做是为了防止请求发送实际上不应该发送的数据。

通常,如果将参数映射为路由参数在操作上没有任何好处,那么就不要太努力地映射它 - 特别是在字符串可以是任何内容的情况下。

顺便说一句 - 如果这是二进制数据的编码;您可以考虑对其进行十六进制编码或使用 modified base-64 for URLs相反 - 如果映射为路由参数,则不会导致错误。

关于asp.net-mvc - 使用 ASP.NET MVC 处理 URL 编码参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791167/

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