1

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

编辑:(简化示例代码)

字符串键 = 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

希望这会有所帮助。

4

2 回答 2

1

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

感谢大家!

最终代码:

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

于 2012-04-17T21:46:51.803 回答
0

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

string key = System.Web.HttpUtility.UrlPathEncode(TripleDESEncode("sharedkey"));
于 2012-04-16T17:15:21.453 回答