【问题标题】:Urls parameters doesn't encoding correctly!Urls 参数编码不正确!
【发布时间】:2011-02-19 05:54:13
【问题描述】:

我正在使用 asp.net mvc 1.0 版,但我的 url 中的某些参数有问题!

我的网址是这样的(http://localhost:2282/Tags/PostList/c#)

 routes.MapRoute(
           "TagsRoute",
           "Tags/PostList/{tag}",
           new { controller="Tags",Action="PostList",tag = "" }
       );

实际上问题是标签参数没有编码,因此忽略了 simbol #!

我正在使用操作链接,但可能在 1.0 版中没有直接编码参数!

 <%=Html.ActionLink(itemtags.Tags.TagName,
                               "PostList","Tags",
                            new { tag = itemtags.Tags.TagName }, 
                            new { style = "color:red;" })%>

有了这个actionlink,只有空格才能正确编码,事实上asp.net mvc变成了asp.net%20mvc,它工作正常!但是 c# 没有编码:(

所以我尝试使用 Server.UrlEncode,实际上它发生了一些事情!!!

事实上 c# 变成了 c%2523 但它又不正确了,因为 # 的十六进制是 %23!

你有什么解决办法吗???路线限制?

谢谢

【问题讨论】:

    标签: asp.net-mvc url routing parameter-passing


    【解决方案1】:

    您在某处获得双重编码。 %25 是 % 的符号,所以:

    '#' -> %23

    '%23' -> %2523

    很难确定数据是否已经编码,尤其是在您将实用程序方法放入循环后(因为它们可以调用其他也对数据进行编码的实用程序方法)。我发现的唯一可以节省我的细线的解决方案是对我已经编码过一次的数据使用标记类,而不是在任何地方将我的文本作为相同的数据类型(例如,字符串)传递。

    任何对数据进行编码的方法都不会接受字符串并返回字符串。它接受一个字符串并返回一个包含字符串(编码)的对象。

    【讨论】:

    • 是的,实际上它进行了双重编码。但为什么??它使用空格而不是 simbol 进行正确编码!所以如果我使用 Server.UrlEncode 我得到一个双重编码是正常的 :(
    • Server.UrlEncode("c#") 返回 "c%23" 对吗?有东西在你身上第二次调用 UrlEncode。商业框架往往有两种风格。要么他们为你编码一切,要么他们什么都不编码。它是内部框架,几乎总是两者都做一点,或者两次做同样的事情。我会尝试根本不对其进行编码。如果这不起作用,那么您需要查看自己的代码并在应用程序的同一层获取对 Server.UrlEncode 的所有调用。否则你将永远玩 whack-a-URL。
    猜你喜欢
    • 2015-02-11
    • 2017-10-18
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多