【发布时间】:2012-05-28 00:33:00
【问题描述】:
考虑以下 UNC 路径到一个简单的 Windows 网络共享(SMB 协议):
\\host\share
您可以轻松地创建System.Uri 或System.IO.DirectoryInfo 的实例,只需将该路径作为字符串传递给构造函数。
现在考虑以下两条路径,将所有安全问题放在一边:
\\username@host\share\\username:password@host\share
您不能简单地将这些传递给 Uri 或 DirectoryInfo 构造函数,因为它们不知道如何处理这些路径,这些路径主要由 linux 系统使用。此外,即使他们这样做了,他们也很可能不会保留登录凭据。
最终我想要一种方法将它们转换为代表实际路径的System.Uri 实例和存储登录信息的System.Net.NetworkCredential 实例。
那么我该如何解决这个问题呢?我什至不知道从哪里开始。从System.UriParser 继承似乎是一个不错的起点,但根据 MSDN,不建议这样做。
Microsoft 强烈建议您使用 .NET Framework 附带的解析器。构建自己的解析器会增加应用程序的复杂性,并且性能不如随附的解析器。
谢谢。
编辑
简单的解决方案(如下所示)是假设“@”符号之前的所有内容都是登录凭据的一部分,而它之后的所有内容都是实际路径。但是,当文件名包含“@”符号时,这可能会出现问题。
\\credential@host\path:没问题
\\credential@host\path@mystorage: 同样没问题,因为第一个 @ 之前的所有内容都是登录的一部分。
\\host\path@mystorage: 现在我们完蛋了。当作为参数传递时,这肯定会引发参数异常。
【问题讨论】:
-
呃,那些不是 UNC 路径。 UNC 路径不允许在其中嵌入用户名和密码信息。因此,不存在带有凭据的 UNC 路径之类的东西。
-
啊,对不起。我想你是对的,但我想不出另一种说法。
标签: .net uri unc networkcredentials