名前に「 # 」が含まれるファイルを (既存の Flurl-Http エンドポイント [1] を使用して) ダウンロードする必要があります。これはもちろん、uri-fragment 検出と競合しないように %23 にエスケープする必要があります。
しかし、Flurl は常に残りをエスケープしますが、この文字はエスケープしません。その結果、uri-fragment として解析されたため、パスの半分とすべてのクエリ パラメータが欠落している動作しない uri が生成されます。
Url url = "http://server/api";
url.AppendPathSegment("item #123.txt");
Console.WriteLine(url.ToString());
戻り値:http://server/api/item%20#123.txt
これは、http リクエスト (を使用Flurl.Http
) が、存在しないリソースのダウンロードのみを試みることを意味しますhttp://server/api/item%20
。
セグメントをプリエスケープしても、結果はまったく同じになります。
url.AppendPathSegment("item %23123.txt");
Console.WriteLine(url.ToString());
再び戻ります: http://server/api/item%20#123.txt
.
この「魔法」を止める方法はありますか?
[1] これは、入力がFlurl.Url
変更する必要のある既存のインスタンスであるデリゲート/インターフェイスがあることを意味します。