簡體   English   中英

C#HttpClient URI不能正確轉義

[英]C# HttpClient URI is not escaping properly

我試圖讓我的網址轉義,但無法正常工作。 具有諷刺意味的是,在我的MacBook上,當我執行這部分代碼時

Uri url = new Uri("http://www.example.com/?i=123%34", true);
// it returns http://www.example.com/?i=123%34 which is exactly what I want.

問題是我的IDE表示它已過時並且在Windows計算機上不起作用。 這是和IDE完全相同的項目。 所以我試圖找到一個解決方案,有人建議

Uri uri = new Uri(Uri.EscapeUriString("http://www.example.com/?i=123%34")); 
// this returns http://www.example.com/?i=123%2534 which is what I DONT want.

那么我該如何解決這個問題呢? 我瀏覽了整個網絡,找不到任何解決方案。 我需要知道如何正確轉義此URL。 上面發布的第二種方法與上面的第一種方法不同。

我通過Fiddler驗證了GET請求,因此確實發生了所有事情。

更新:

同樣,我需要服務器接收URL的確切字符串聲明方式。 我希望服務器處理轉換。 我不能用%25代替%符號。 必須完全按照我聲明字符串的方式接收它。 此外,“ http://www.example.com/?i=1234 ”也不是我想要的。

如果您對字符串ht tp://www.example.com/?i = 1234表示Uri url = new Uri(Uri.UnescapeDataString("http://www.example.com/?i=123%34")); ,可以嘗試Uri url = new Uri(Uri.UnescapeDataString("http://www.example.com/?i=123%34"));

問題在於Windows上的Web服務器的配置,該配置允許兩次轉義。 您的原始URL是http://www.example.com/?i=123%34 ,如果未轉義,則變為http://www.example.com/?i=1234

另一方面,Windows上的Web服務器再次轉義%字符,而不是轉義%34 因此,它變成http://www.example.com/?i=123%2534

這就是為什么在轉義符之前,不應在URL中使用諸如%之類的字符。

編輯-

我在Firefox中鍵入了以下兩個URL,以查看如何在服務器上接收參數。

http://www.example.com/?i=123%34中i值為1234

http://www.example.com/?i=123%2534中i值為123%34

如果服務器必須接收%字符,則必須對其進行轉義以通過HTTP進行分派。 實際上,沒有其他方法可以通過電線發送它。 如果不對%字符進行轉義,它將與34一起作為轉義序列,並在服務器上自動變為4

如果您的網絡檢查員在請求中顯示了未轉義的文本,那是因為在向您顯示URL之前,它會美化URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM