2012-09-07 32 views
2

我有一个ashx文件,它需要一些查询字符串值来传递适当的图像。在上下文中解码查询字符串。请求

问题是一些搜索引擎urlencode然后htmlencode这些网址在他们的缓存或当他们索引这些。

因此,例如,而不是让

/preview.ashx?file=abcd.jpg&root=small 

我得到

/preview.ashx?file=abcd.jpg&root=small 

这主要投落context.Request.QueryString["root"]所以它认为没有可变

我猜第二查询字符串中的键是amp;根即部分&签收后。

我想知道的是,如果有一种方法来自动html和urldecode服务器端querystring,以便程序不会感到困惑。

+0

你用'C'标记了问题 - 你的意思是'C#'吗? – Oded

+0

不应该是︰'context.Request.QueryString [“root”]'(_string_'根') – Oded

+0

是的..我的意思是c#... context.Request.QueryString [“root”]应该返回小,但是它返回null,因为没有这样的密钥根....有一个关键放大器;根 – robert

回答

5

不止一次呼叫HttpUtility.HtmlDecodeHttpUtility.UrlDecode没有任何伤害。

string queryString = "/preview.ashx?file=abcd.jpg&root=small"; 
var parsedString = HttpUtility.HtmlDecode(queryString); 
var root = HttpUtility.ParseQueryString(parsedString)["root"]; 
+0

谢谢...我实际上是试图避免这样做...但我想因为没有办法SET context.Request解码后的.QueryString,这也应该工作。想知道是否有办法将其解码到服务器端,这样我就可以将程序从其中解脱出来 – robert

+0

实际上,如果您在原始URL中使用了编码+符号,并且您称为解码两次,那么这不是问题吗?第一次,它将被解码为+,但第二次,+将被解码为空间。除非我错过了什么? – muttley91

+0

@rar如何发布一个使用前例'HttpUtility.UrlEncode'和'HttpUtility.UrlDecode'的示例,以便我们可以讨论具体的示例代码。 –

4

为URL编码和解码可以使用以下方法:

string encoded = System.Web.HttpUtility.UrlEncode(url); 

string decoded = System.Web.HttpUtility.UrlDecode(url); 

我见过的情况下在查询字符串已经被双重编码了过去。在这种情况下,您需要双重解码 - 这可能是您的问题...