[英]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.