2012-04-16 221 views
1

我有一個休息服務,它需要將加密密鑰作爲路徑的一部分傳遞。我urlencode的關鍵,它放在瀏覽器中時效果很好。但是,在我的代碼中,我的用戶WebRequest.Create似乎取代了加密密鑰生成的任何反斜槓。這導致服務認爲它是路由的一部分,並且以404失敗。這是.net框架中的一個已知缺陷,還是我錯過了某些東西?看起來像一個很大的交易。WebRequest.Create路徑中的反編碼反斜槓

編輯:(簡體示例代碼)

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

更可能是一個錯誤的轉義/編碼問題,而不是框架。你怎麼發鑰匙?你能顯示任何代碼嗎? – Guffa 2012-04-16 16:25:01

+0

已更新。謝謝! – RockyMountainHigh 2012-04-16 16:42:07

回答

1

好吧,我最終行動做與我的客戶妥協,跳過直序列化加密到base64。由於我所傳遞的性質,這是唯一可以接受的。將來需要加密,我認爲這是一個需要解決的主要問題。至少提出了一種解決方法。如果我遇到一個,我會發布它。

謝謝大家!

最終代碼:

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

0

使用UrlPathEncode方法時的值是路徑的一部分,而不是查詢字符串的一部分:

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

問題在於反斜槓永遠不會被加速,所以在我的情況下我回到了我開始的地方。因此,FHnapfF5yBCEKt3/3YOQ5g%3d%3d將被解釋爲路徑的兩部分。正確? – RockyMountainHigh 2012-04-16 19:00:32