ASP.Net MVC 2.0:unescaping URL查询参数

时间:2010-11-12 17:14:23

标签: asp.net-mvc url-encoding urldecode

我有以下网址:

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

注意%EC参数值的name

%EC = 236 = (igrave)

在我的行动方法中:

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

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

4 个答案:

答案 0 :(得分:1)

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">)。 Firefox会在悬停时显示“ì”,但在点击或复制时会给出编码版本。

如果用户在URL中输入任意unicode,则没有好办法处理(因为他们有效地向您发送无效请求)。

答案 1 :(得分:1)

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

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

或者,如果您的网站是UTF-8

<globalization requestEncoding="utf-8" />

但在这种情况下,网址需要看起来像name=Cyan%c3%acde。您应该始终使用URL帮助程序生成URL,以便正确编码它们。

答案 2 :(得分:0)

我能找到的一些东西:

  

HttpServerUtility.UrlDecode(你的参数)

     

HttpUtility.UrlDecode(你的参数)

     

Server.UrlDecode(你的参数)

这些都适合你吗?

答案 3 :(得分:0)

我在ASP.NET和js中遇到了与url编码类似的问题(“必须编码为%EC才能工作”。

如果您在<globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" \>节点中设置system.web,则必须使用HttpContext.Current.Server.UrlEncode来urlencode \ decode,这样您才能在web.config中使用全球化设置。

在当前UrlEncode中使用HttpContext之前,我使用的是不使用当前全球化设置的HttpUtility.UrlDecode

为我工作!