我不認爲整個URL的Uri.EscapeDataString()是在這裏使用的正確方法。例如見:
string uriString =
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);
"https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query"
string escapedUriString = Uri.EscapeUriString(uriString);
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test%20query"
好像EscapeDataString通過逃避一切,包括完全打破了URL「https://開頭」前綴,而EscapeUriString剛剛逃脫需要轉義什麼。
按照documentation你應該「使用EscapeUriString方法來製備轉義URI字符串是Uri構造函數的參數。」。個人 - 我一直只是逃脫了我建設Uri的參數,例如,如果參數值包含&符號 - 我可以強制轉義它,而不是依靠EscapeUriString知道所有內容。
顯然 - 「https%3A%2F%2Fwww.google.com%2Fsearch%3Fgcx%3Dw%26sourceid%3Dchrome%26ie%3DUTF-8%26q%3Dtest%20query」不是有效的網址。
*編輯
我一定是錯過了WP7.0只有一個字符串URL屬性現在已經過時的WP7.1和財產確實需要使用轉義的EscapeDataString整個URL。我在兩個項目類型中都嘗試過 - 目標是7.0和7.1,並沒有注意到任何掛起。唯一的區別是,7.0會永遠銘記我的應用程序,而7.1不會。也許在你的應用程序中有一些其他代碼會在您從墓碑中回來時阻止。這裏是我的代碼:
string uriString =
"https://www.google.com/search?gcx=w&sourceid=chrome&ie=UTF-8&q=test query";
string escapedDataString = Uri.EscapeDataString(uriString);
var wbt = new WebBrowserTask();
wbt.URL = escapedDataString;
wbt.Show();
另一個想法 - 逃避URI字符串兩次 - 第一次使用EscapeUriString呼籲整個地址或調用EscapeDataString只是爲參數建立字符串時,然後逃脫再次得到的URI使用EscapeDataString整個。
也許你應該只使用Uri.EscapeUriString而不是Uri.EscapeDataString。你是逃避整個字符串還是隻是參數值?您是否驗證過您的桌面計算機上打開的URL? –
感謝您的想法,@xyzzer。 WP OS 7.0文檔(.chm文件)很清楚,需要使用Uri.EscapeDataString。由於Uri.EscapeUriString對於WebBrowserTask.URL沒有成功,所以我在開發過程中認爲這是真實的。我正在逃避整個字符串:URL是從其他來源傳入的,所以這很容易做到。未轉義的URL可在桌面瀏覽器中正常打開。 –