我有一个.NET的Uri实现的问题.似乎如果方案是"ftp",则查询部分不会被解析为Query,而是作为路径的一部分进行解析.
以下面的代码为例:
Uri testuri = new Uri("ftp://user:pass@localhost/?passive=true");
Console.WriteLine(testuri.Query); // Outputs an empty string
Console.WriteLine(testuri.AbsolutePath); // Outputs "/%3Fpassive=true"
Run Code Online (Sandbox Code Playgroud)
在我看来,Uri类错误地将查询部分解析为路径的一部分.但是将方案更改为http,结果如预期:
Uri testuri = new Uri("http://user:pass@localhost/?passive=true");
Console.WriteLine(testuri.Query); // Outputs "?passive=true"
Console.WriteLine(testuri.AbsolutePath); // Outputs "/"
Run Code Online (Sandbox Code Playgroud)
有没有人有这个解决方案,或知道一个按预期工作的替代Uri类?
好吧,问题不是我无法创建 FTP 连接,而是 URI 没有按照 RFC 2396 进行解析。
我实际上想做的是创建一个 Factory,它根据给定的连接 URI 提供通用文件传输接口(包含 get 和 put 方法)的实现。URI 定义协议、用户信息、主机和路径,任何需要传递的属性都应通过 URI 的查询部分传递(例如 FTP 连接的被动模式选项)。
然而,使用 .NET Uri 实现证明这很困难,因为它似乎根据架构以不同的方式解析 URI 的查询部分。
因此,我希望有人知道解决此问题的方法,或者找到看似损坏的 .NET Uri 实现的替代方案。在花几个小时实现我自己的之前知道会很高兴。
归档时间: |
|
查看次数: |
1717 次 |
最近记录: |