我有一项休息服务,需要将加密密钥作为路径的一部分传递。我对密钥进行了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
希望这有帮助。
答案 0 :(得分:1)
好的,我最终与我的客户妥协,并跳过加密直接序列化为base64。由于我所传递的性质,这只能被接受。将来需要加密,我认为这是一个需要修复的主要问题。至少提出了一种解决方法。如果我遇到一个我会发布它。
谢谢大家!
最终代码:
HttpUtil.UrlEncode(Convert.ToBase64String(Encoding.UTF8.GetBytes( “sharedKey”)));
答案 1 :(得分:0)
当值是路径的一部分时,使用UrlPathEncode
方法,而不是查询字符串的一部分:
string key = System.Web.HttpUtility.UrlPathEncode(TripleDESEncode("sharedkey"));