WebRequest。在路径中创建未编码的反斜杠

时间:2012-04-16 16:21:04

标签: c#-4.0 url-encoding

我有一项休息服务,需要将加密密钥作为路径的一部分传递。我对密钥进行了urlencode,只需将其放入浏览器即可。但是,在我的代码中,我使用WebRequest.Create,它似乎替换了加密密钥生成的任何反斜杠。这导致服务认为它是路由的一部分并且失败了404.这是.net框架中的已知缺陷还是我遗漏了什么?似乎是一件非常重要的事情。

编辑:(简化示例代码)

string key = System.Web.HttpUtility.UrlEncode(TripleDESEncode(“sharedkey”)); string uri = string.Format(“http://mydomail.com/deposit/{0}.{1}”,key,“json”);

// uri在http://mydomail.com/deposit/FHnapfF5yBCEKt3%2f3YOQ5g%3d%3d.json

看起来像这样

HttpWebRequest webRequest =(HttpWebRequest)WebRequest.Create(uri);

//现在HttpWebRequest中的地址就是这个...... //http://mydomail.com/deposit/FHnapfF5yBCEKt3/3YOQ5g%3d%3d.json

希望这有帮助。

2 个答案:

答案 0 :(得分:1)

好的,我最终与我的客户妥协,并跳过加密直接序列化为base64。由于我所传递的性质,这只能被接受。将来需要加密,我认为这是一个需要修复的主要问题。至少提出了一种解决方法。如果我遇到一个我会发布它。

谢谢大家!

最终代码:

HttpUtil.UrlEncode(Convert.ToBase64String(Encoding.UTF8.GetBytes( “sharedKey”)));

答案 1 :(得分:0)

当值是路径的一部分时,使用UrlPathEncode方法,而不是查询字符串的一部分:

string key = System.Web.HttpUtility.UrlPathEncode(TripleDESEncode("sharedkey"));