2014-01-28 78 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。