嘿,我知道這個問題是2歲,但我穿過來了同樣的問題。我想你會發現WebRequest.RegisterPrefix()
確實如果您嘗試註冊http:
(注意單個冒號,沒有正斜槓),則返回false。如果我找到解決方法,我會盡量記住更新這篇文章。
編輯
在我的具體情況,我想扔出去System.Net.FtpWebRequest
,並推出自己的FTP客戶端實現(因爲該框架的實施sucks)。
爲了做到這一點,我使用反射(和一堆後期綁定技巧)來獲取註冊前綴的數組列表,並刪除鏈接到內部類System.Net.FtpWebRequestCreator
的數組。
我不知道如果所有這些API可用於Windows手機,但這裏是我所做的:
Type webRequest = typeof(System.Net.WebRequest);
Assembly system = Assembly.GetAssembly(webRequest);
Type ftpWebRequestCreator = system.GetType("System.Net.FtpWebRequestCreator");
ArrayList prefixList = (ArrayList)webRequest.GetProperty("PrefixList", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null, null);
IEnumerator enumerator = prefixList.GetEnumerator();
while (enumerator != null && enumerator.MoveNext()) {
if (object.ReferenceEquals(enumerator.Current.Creator.GetType(), ftpWebRequestCreator)) {
prefixList.Remove(enumerator.Current);
if (System.Net.WebRequest.RegisterPrefix(enumerator.Current.Prefix, new CustomWebRequestCreator())) {
enumerator = null;
} else {
enumerator = prefixList.GetEnumerator();
}
}
}
// Now I can use Create() on the base class
System.Net.WebRequest myCustomWebRequest = System.Net.WebRequest.Create("ftp://example.com/public");
這是通過查找與FtpWebRequestCreator
註冊的所有前綴,並用自己的替換它們創造者。爲了適應http(s),這應該相當簡單。
如何註冊自定義協議?如果它沒有實現,他們不應該刪除API或拋出NotSupportedException? –
API不是關於不同的協議,它只改變現有的協議(https/http)。由於只有一個堆棧,它可以完成預期的任務。它不會拋出NotSupported的原因是它做它所做的事情(以便桌面和手機之間的共享代碼不會中斷)。 –
如果只是在客戶端/瀏覽器實現之間進行交換,爲什麼不使用枚舉而不是接口呢?爲什麼要給出可擴展性的錯誤認識? –