ねえ、私はこの質問には2歳知っているが、私は出くわしました同じ問題。 http:
を登録しようとするとWebRequest.RegisterPrefix()
はになります(単一のコロンとスラッシュはありません)。回避策が見つかった場合は、この投稿を更新することを忘れないでください。私は(フレームワークの実装sucksので)System.Net.FtpWebRequest
を投げると自分のFTPクライアントの実装をロールしたかった私の特定のケースで
EDIT
。
これを行うために、私は登録された接頭辞のarraylistを取得し、内部System.Net.FtpWebRequestCreator
クラスにリンクされているものを削除するためにリフレクション(および遅いバインディングトリック)を使用しました。
私は、これらのAPIのすべてが、Windowsの携帯電話のために利用できるかどうかわからないんだけど、ここで私がやったことだ:
これは
FtpWebRequestCreator
に登録されているすべての接頭辞を見つけ、自分でそれらを置き換えることによって動作
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");
クリエイター。 http(s)にこれを適合させるのはかなり簡単です。
カスタムプロトコルの登録はどうですか?実装されていない場合は、APIを削除したり、NotSupportedExceptionをスローしたりしないでください。 –
APIは異なるプロトコルではなく、既存のプロトコル(https/http)のみを変更します。スタックが1つしかないので、予想されることが実行されます。それがNotSupportedを投げていない理由は、それが言うことを(デスクトップと電話の間の共有コードが壊れないように)することです。 –
クライアント/ブラウザの実装間を交換する場合は、インターフェイスではなく列挙型を使用してください。なぜ拡張性の誤った認識を与えるのですか? –