ダウンロードした XML をストリームとして .NET XmlReader に渡す
元の URL を再取得させるのではなく、プロキシ経由の応答ストリームを XML パーサーに渡します。
HTTP クライアントは正しいプロキシ経由で XML をダウンロードします。次の行は元の URL から XML リーダーを作成します。その行はダウンロード済みのデータを解析するのではなく、もう一度取得を開始します。
すでに意図した経路で構成されたクライアントでは、その応答ストリームをパーサーに渡します:
using var response = await client.GetAsync(documentUri);
response.EnsureSuccessStatusCode();
using var stream = await response.Content.ReadAsStreamAsync();
var settings = new XmlReaderSettings
{
DtdProcessing = DtdProcessing.Prohibit,
XmlResolver = null
};
using var reader = XmlReader.Create(stream, settings, documentUri.AbsoluteUri);
var document = XDocument.Load(reader);
関連する名前空間は System.Xml と System.Xml.Linq です。この例は DTD 処理と外部解決を意図的に無効にしています。同じクライアントを通じて任意の外部エンティティを取得する方法ではありません。
基底 URI はドキュメントの位置メタデータを保持します。承認された解析または検証ワークフローが外部スキーマやその他の依存関係を実際に取得する場合、それらの取得には独自の明示的なリゾルバーとルーティング設計が必要です。
最初の成功したクライアントのパスワードを変更して、2 回目のネットワーク障害を診断しないでください。パーサーがストリームを受け取ったのか URL を受け取ったのかを確認し、その後で追加リソースを別途追跡してください。