我必须下载一个文件(使用现有的 Flurl-Http 端点 [1]),其名称包含一个“ # ”,当然必须将其转义到 %23 以免与 uri-fragment 检测冲突。
但是 Flurl 总是会转义其余部分,但不会转义这个字符,从而导致 uri 无法正常工作,其中一半的路径和所有查询参数都丢失了,因为它们被解析为 uri-fragment:
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
。
有什么办法可以阻止这种“魔法”的发生?
Flurl.Url
[1] 这意味着我有委托/接口,其中输入是我必须修改的现有实例。