用户名为“domainname \ username”的C#Uri

时间:2014-01-28 20:16:29

标签: c#

我有一个像

这样的字符串
<Scheme>:\\<domain>\<domainuser>:<EncryptedPassword>@servername\

我希望能够创建统一资源标识符(URI)并轻松访问URI的各个部分。对于大多数使用C#Uri类的人来说效果很好。但是当用户被提供为&#34; domainname \ domainuser&#34;时,我得到无效的URI异常。

如何在C#中最好地处理这个问题。

1 个答案:

答案 0 :(得分:2)

你必须PercentEncode(/ EscapeDataString)这样的字符串。

如上所述,在创建URI对象之前,必须将用户名“xyz_domain \ abc_user”编码为“xyz_domain%5Cabc_user”

在解压缩之后,您可以使用Uri Class中的UnescapeDataString方法对字符串执行PercentDecode(/ UnescapeDataString)。您可以使用C#Uri Class中的UnescapeDataString方法 这是代码

public static string GetUsername(this Uri uri)
        {
            if (uri == null || string.IsNullOrWhiteSpace(uri.UserInfo))
                return string.Empty;
            var items = uri.UserInfo.Split(new[] { ':' });
            //Replace precent encoding in the username.
            var result = Uri.UnescapeDataString(items[0]);
            return result.Length > 0 ? result : string.Empty;
        }

类似的方案可以应用于uri字符串的任何部分。只需记住UnescapeDataString的EscapeDataStrings即可。