2009-11-18 33 views
12

Tôi thường kết thúc các trình bao bọc/mở rộng của riêng mình cho/xung quanh System.Uri và tự hỏi liệu có ai biết về một triển khai mã nguồn mở tốt hay không. Những gì tôi muốn làm nhất là phân tích các tham số chuỗi truy vấn, tạo chuỗi truy vấn mới (đây là khóa) và thay thế tên trang. Có bất kỳ những cái tốt, hoặc là System.Uri đủ tốt cho bạn?C# Url Builder Lớp

Trả lời

15

Lớp học của BradVin QueryString Builder rất tốt. Giao diện thông thạo và hỗ trợ mã hóa.

Bạn cũng nên kiểm tra lớp học UrlBuilder trên CodeProject này. Tương tự như System.UriBuilder có hỗ trợ tốt hơn để làm việc với QueryString.

+0

Kudo trên câu trả lời này. Điều này gần như nguyên văn những gì tôi đã lăn trong nhiều năm. Không thích UriBuilder vì tôi muốn có nhiều chức năng hơn xung quanh việc thêm các tham số qs động. – Trent

6

Chúng tôi sử dụng lớp Uri thay thế riêng của chúng tôi một phần dựa trên Uri, như bạn nói. Tuy nhiên, tôi nghĩ rằng có một sự khác biệt quan trọng cần được thực hiện - System.Uri thường được dự định là không thay đổi - hoặc, chính xác hơn, hoạt động không thay đổi. Khi có một sự tồn tại, nó đại diện cho một điểm cuối phổ biến/tài nguyên chính xác. Nếu bạn cần mô tả một vị trí khác, bạn nên tạo một Uri mới, không thay đổi vị trí hiện tại.

Có một lớp riêng biệt chuyên sản xuất Uri's: UriBuilder.

0

Tôi không chắc chắn chính xác những gì bạn đang cố gắng làm (ví dụ sẽ giúp ích) nhưng có vẻ như bạn đang cố gắng lấy một số chức năng của mod_rewrite của Apache trong ASP.NET.

an article at MSDN về chính xác điều này.

3

Giữa System.UriSystem.UriBuilder, bạn thiếu những tính năng nào trong hai tính năng này?

+0

Uri là bất di bất dịch như Rex M làm rõ. Nhưng tôi thậm chí không biết về UriBuilder. Sẽ nhìn vào nó. – Trent

1

Có một dự án mã nguồn mở mới rất đẹp trên CodePlex cho phép bạn đọc, viết, mã hóa tiếng Uris và hơn một chút. Kiểm tra xem chúng ra!

http://querystrings.codeplex.com

2
/// <summary> 
    /// The arguments must be like: varName1, varValue1, varName2, varValue2 and so on. 
    /// Empty names will be not be added to the result. 
    /// Returns a string of the form varName1=varValue1&varName2=varValue2... 
    /// </summary>  
    public static string BuildQueryString(params string[] strings) 
    { 
     Debug.Assert(0 == strings.GetLength(0) % 2); 

     StringBuilder builder = new StringBuilder(50); 
     bool isName = true; 
     bool isEmptyName = false; 

     foreach (string crtString in strings) 
     { 
      isEmptyName = (isName && string.IsNullOrEmpty(crtString)) || 
       (!isName && isEmptyName); 

      if (!isEmptyName) 
      { 
       builder.Append(HttpUtility.UrlEncode(crtString)); 

       if (isName) 
        builder.Append("="); 
       else 
        builder.Append("&"); 
      } 

      isName = !isName; 
     } 

     return builder.ToString(); 
    } 
12

Flurl [tiết lộ: Tôi là tác giả] là một người thợ xây URL thạo trông như thế này:

var url = "http://www.some-api.com" 
    .AppendPathSegment("endpoint") 
    .SetQueryParams(new { 
     api_key = ConfigurationManager.AppSettings["SomeApiKey"], 
     max_results = 20, 
     q = "Don't worry, I'll get encoded!" 
    }); 

Nếu bạn tình cờ được xây dựng URL với mục đích gọi cho họ, Flurl.Http là một thư điện tử đồng hành cho phép bạn thực hiện HTTP khỏi chuỗi thông thạo:

await "https://api.mysite.com" 
    .AppendPathSegment("person") 
    .SetQueryParams(new { ap_key = "my-key" }) 
    .WithOAuthBearerToken("MyToken") 
    .PostJsonAsync(new { first_name = firstName, last_name = lastName }); 

Lấy trọn gói trên NuGet:

PM> Install-Package Flurl.Http

hay chỉ là người xây dựng URL độc lập:

PM> Install-Package Flurl