嘿,我知道这个问题是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的原因是它做它所做的事情(以便桌面和手机之间的共享代码不会中断)。 –
如果只是在客户端/浏览器实现之间进行交换,为什么不使用枚举而不是接口呢?为什么要给出可扩展性的错误认识? –