2014-01-28 41 views
2

我有一个像C#URI以用户名为“域名用户名”

<Scheme>:\\<domain>\<domainuser>:<EncryptedPassword>@servername\ 

我希望能够建立统一资源标识符(URI)和容易获得的URI的部分字符串。对于大多数情况下使用C#Uri类很有用。但是当用户被提供为“domainname \ domainuser”时,我会得到无效的URI异常。

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

+0

@AlexeiLevenkov你的意思是'\'?关于反斜杠业务的评论部分是挑剔的...... –

+0

的确我尝试说“检查是否允许在该部分中使用...”...... [RFC](http://www.ietf.org/rfc/) rfc3986.txt)3.2.1节似乎不允许用户信息... –

回答

1

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

如同上述的用户名问题 “xyz_domain \ abc_user” 必须在创建URI对象之前被编码为 “xyz_domain%5Cabc_user”到。

提取,你可以做PercentDecode(/ UnescapeDataString)使用来自乌里Class.You UnescapeDataString方法可以使用UnescapeDataString方法从C#Uri Class 这里串的后后来是代码

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。