2012-02-22 24 views
9

Tôi có liên kết ở một số định dạng:Cách phân tích cú pháp thông tin người dùng từ URL trong C#?

http://user:[email protected] 

Làm cách nào để có được người dùng và chuyển từ URL này?

+5

Bạn đã thực sự cố gắng điều gì? Kết quả mong đợi là gì? Nếu bạn không nhận được kết quả mong đợi, bạn đã thực sự đạt được điều gì? Xin lỗi, đây không phải là trang web "cung cấp cho tôi mã" - vui lòng đọc Câu Hỏi Thường Gặp nếu điều đó không rõ ràng. –

+2

Từ câu hỏi thường gặp: _ "Bạn chỉ nên hỏi những câu hỏi thực tế, có thể trả lời dựa trên những vấn đề thực tế mà bạn phải đối mặt." _ Và _ "Chúng ta đều ở đây để học cùng nhau. Hãy khoan dung những người khác có thể không biết mọi thứ bạn biết". _ –

+0

Câu hỏi hay hơn là cách xóa: P – Jay

Trả lời

18

Lớp Uri có thuộc tính UserInfo.

Uri uriAddress = new Uri ("http://user:[email protected]/index.htm "); 
Console.WriteLine(uriAddress.UserInfo); 

Giá trị được trả lại bởi thuộc tính này thường có định dạng "userName: password".

http://msdn.microsoft.com/en-us/library/system.uri.userinfo.aspx

+1

Điều này chỉ hoạt động nếu không có biểu tượng "@" trong thông tin xác thực (thông thường cho tên người dùng là địa chỉ email hoặc mật khẩu mạnh). –

+0

Đúng. Lưu ý rằng '@' là ký tự dành riêng trong Mã định danh tài nguyên đồng nhất, được chỉ định bởi RFC. Xem https://tools.ietf.org/html/rfc3986#page-12 Như bạn có thể thấy có rất nhiều ký tự, khi được chứa trong tên người dùng hoặc mật khẩu làm cho URI không hợp lệ. – supertopi

+0

Vâng, khi chúng tôi đã làm điều này, chúng tôi đã kết thúc phân tích các thông tin đăng nhập và sử dụng HttpUtility.UrlEncode trên chúng trước khi thêm chúng trở lại. Windows Explorer sẽ chấp nhận thông tin đăng nhập chưa mã hóa (là nơi người dùng của chúng tôi đang sao chép/dán chúng vào ứng dụng của chúng tôi). Ngoài ra, UriBuilder không mã hóa chúng khi nó xây dựng URI. Tôi mong đợi một "người xây dựng" để xử lý những thứ như thế; thật khó chịu khi phải phân tích cú pháp nội dung trước khi chuyển nó tới một trình phân tích cú pháp. :) –

5

tôi mất này xa hơn một chút và viết một số phần mở rộng URI để tên truy cập và mật khẩu chia. Muốn chia sẻ giải pháp của tôi.

public static class UriExtensions 
{ 
    public static string GetUsername(this Uri uri) 
    { 
     if (uri == null || string.IsNullOrWhiteSpace(uri.UserInfo)) 
      return string.Empty; 

     var items = uri.UserInfo.Split(new[] { ':' }); 
     return items.Length > 0 ? items[0] : string.Empty; 
    } 

    public static string GetPassword(this Uri uri) 
    { 
     if (uri == null || string.IsNullOrWhiteSpace(uri.UserInfo)) 
      return string.Empty; 

     var items = uri.UserInfo.Split(new[] { ':' }); 
     return items.Length > 1 ? items[1] : string.Empty; 
    } 
} 
+0

Phân tích cú pháp miền @ bị bỏ lỡ – Jay

+0

Cảm ơn, điều này đã giúp tôi :) – gakera

+0

Chúng tôi thường cần cả hai cùng một lúc https://gist.github.com/duongphuhiep/13f104e4229bf7e1869921e034834ec6 – Hiep

Các vấn đề liên quan