我有一个这样的 url: http://localhost:8080/search.json?q=L%u00e6r
,这是 Lær 的编码搜索。
不幸的是,从这个 url 创建一个 WebRequestWebRequest.Create(url)
会产生以下 url: http://localhost:8080/search.json?q=L%25u00e6r
。
请注意,它错误地解码%u00e6
并生成%25u00e6r
. 有没有办法转换这种 unicode 转义值或让 WebRequest.Create 正确处理它?
这很可能会作为错误报告给 .net 团队。如果查询包含 §、æ、ø 或 å(或任何其他非 ascii 字符),WebRequest.Create()
则无法使用返回的查询字符串。Request.QueryString.ToString()
这是一个小的 mvc 动作,可以用来测试它。用查询调用它Query?q=L%C3A6r
public ActionResult Query()
{
var query = Request.QueryString.ToString();
var url = "http://localhost:8080?" + query;
var request = WebRequest.Create(url);
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
return new FileStreamResult(stream, "text/plain");
}
}
编辑:
不幸的是,@animaonline 的解决方案不适用于 url 之类http://localhost:8080/search.json?q=Lek+%26+L%u00e6r
的,这些 url 被解码为http://localhost:8080/search.json?q=Lek & Lær
,其中WebRequest.Create
混淆了&
,并认为它分隔了参数,而不是作为参数的一部分q
。