代码之家  ›  专栏  ›  技术社区  ›  THX-1138

ASP.NET MVC 2.0:取消捕获URL查询参数

  •  2
  • THX-1138  · 技术社区  · 14 年前

    我有以下网址:

    http://localhost:8041/Reforge.aspx?name=Cyan%ECde&realmId=1

    通知 %EC 在价值上 name 参数。

    %EC=236= γ (IGRAVE)

    在我的行动方法中:

    public ActionResult Index(string name, int realmId) {...}
    

    名称[4]是代码为65533(0xfffd)的字符。我做错什么了?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Darin Dimitrov    14 年前

    这将取决于web.config中的全球化元素:

    <globalization requestEncoding="iso-8859-1" />
    

    或者如果你的网站是UTF-8

    <globalization requestEncoding="utf-8" />
    

    但是在这种情况下,URL应该看起来像 name=Cyan%c3%acde . 您应该始终使用URL帮助器来生成URL,以便对其进行正确编码。

        2
  •  1
  •   bdukes Jon Skeet    14 年前

    HttpUtility.UrlDecode("%EC") 将该字符(65533)作为其输出。

    HttpUtility.UrlEncode("ì") 生产 "%c3%ac"

    这是怎么产生的 %EC ?似乎您的编码没有按ASP.NET的预期工作。

    更新

    你说你只是进来 http://localhost:8041/Reforge.aspx?name=Cyanìde&realmId=1 在您的浏览器中,它没有正确编码。我建议您首先不要将其输入浏览器。如果要生成该URL,则需要对其进行编码(以便其呈现为 <a href="http://localhost:8041/Reforge.aspx?name=Cyan%c3%acde&realmId=1"> )当鼠标悬停在上面时,火狐会用“195”来显示这一点,但当点击或复制时,它会给出编码的版本。

    如果用户在一个URL中输入任意的Unicode,您就没有一个好的方法来处理它(因为他们有效地向您发送无效的请求)。

        3
  •  0
  •   Sam    14 年前

    我能找到一些东西:

    httpserverputility.urldecode(您的参数)

    httputility.urldecode(您的参数)

    server.urlcode(您的参数)

    这些对你有用吗?

        4
  •  0
  •   alestanis    12 年前

    我在ASP.NET和JS中遇到了类似的URL编码问题(必须编码为%ec才能工作)。

    如果你设置 <globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" \> 在里面 system.web 节点,必须使用 HttpContext.Current.Server.UrlEncode 以这种方式使用全球化设置 web.config .

    使用前 UrlEncode 在电流中 HttpContext 我在用 HttpUtility.UrlDecode 它不使用当前的全球化设置。

    为我工作!