考虑以下简单 Windows 网络共享(SMB 协议)的 UNC 路径:
\\host\share
您可以轻松地创建一个实例,System.Uri
或者System.IO.DirectoryInfo
通过将该路径作为字符串传递给构造函数。
现在考虑以下两条路径,将所有安全问题放在一边:
\\username@host\share
\\username:password@host\share
您不能简单地将这些传递给 Uri 或 DirectoryInfo 构造函数,因为它们不知道如何处理这些路径,这些路径主要由 linux 系统使用。此外,即使他们这样做了,他们也很可能不会保留登录凭据。
最终,我想要一种将这些转换为System.Uri
代表实际路径的实例的方法,以及System.Net.NetworkCredential
存储登录信息的实例。
那么我该如何解决这个问题呢?我什至不知道从哪里开始。继承 fromSystem.UriParser
似乎是一个不错的起点,但根据 MSDN,不建议这样做。
Microsoft 强烈建议您使用 .NET Framework 附带的解析器。构建自己的解析器会增加应用程序的复杂性,并且不会像交付的解析器那样执行。
谢谢。
编辑
简单的解决方案(如下所示)是假设“@”符号之前的所有内容都是登录凭据的一部分,而它之后的所有内容都是实际路径。但是,当文件名包含“@”符号时,这可能会出现问题。
\\credential@host\path
: 没问题
\\credential@host\path@mystorage
: 同样没问题,因为第一个 @ 之前的所有内容都是登录的一部分。
\\host\path@mystorage
: 现在我们破产了。当作为参数传递时,这肯定会引发参数异常。