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
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.
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.
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.
Có an article at MSDN về chính xác điều này.
Giữa System.Uri
và System.UriBuilder
, bạn thiếu những tính năng nào trong hai tính năng này?
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
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!
/// <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();
}
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
- 1. C# HashCode Builder
- 2. Unknown lớp ZBarReaderView trong Interface Builder nộp
- 3. C++ Builder XE2, TXMLDocument 'DTD bị cấm'
- 4. Embarcadero C++ builder + FireMoneky vs Qt
- 5. Chuyển Borland C++ Builder sang Qt
- 6. Builder design pattern - Không có lớp trừu tượng/giao diện
- 7. Không thể tìm thấy lớp android.support.v4.app.NotificationCompat $ Builder
- 8. thông tin lớp Unknown trong Interface Builder nộp
- 9. Pattern Builder và Persistence
- 10. Interface Builder UIDatePicker
- 11. Quartz.Net CronExpression Builder
- 12. Regex Query Builder
- 13. builder Thiếu (org.maven.ide.eclipse.maven2Builder)
- 14. Enable Xử lý ngoại lệ an toàn trong C++ Builder
- 15. C# Predicate Builder có chức năng "NOT IN"
- 16. Cách sử dụng toán tử Delphi "in" trong C++ Builder
- 17. Loại Generic Từ Enum & The Builder Pattern
- 18. Builder Vs Decorator pattern
- 19. Netbeans GUI Builder
- 20. Interface Builder cảnh báo
- 21. Generics Java + mẫu Builder
- 22. GUI Builder cho Python
- 23. Adobe Flash Builder (flex4): addChild() không có sẵn trong lớp này.
- 24. URL Validation (Objective-C)
- 25. Có bất kỳ "loại" trên Borland C++ Builder như "thập phân" từ C#?
- 26. lỗi chạy builder 'CDT Builder' khi cố gắng xây dựng OpenCV cho các mẫu android
- 27. Tên tệp đầu ra trong Flash Builder
- 28. LINQ to objects Predicate Builder
- 29. Form Builder GUI cho PHP
- 30. NetBeans GUI builder: "loading ..." message
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