2009-07-16 26 views
34

Tôi giữ cảm giác như tôi đang sáng tạo lại bánh xe, vì vậy tôi nghĩ tôi sẽ hỏi đám đông ở đây. Hãy tưởng tượng tôi có đoạn mã như sau:Làm cách nào để xây dựng URL một cách tin cậy trong C# bằng cách sử dụng các phần?

string protocol = "http"; // Pretend this value is retrieved from a config file 
string host = "www.google.com"; // Pretend this value is retrieved from a config file 
string path = "plans/worlddomination.html"; // Pretend this value is retrieved from a config file 

Tôi muốn tạo url "http://www.google.com/plans/worlddomination.html". Tôi tiếp tục làm điều này bằng cách viết code cheesy như thế này:

protocol = protocol.EndsWith("://") ? protocol : protocol + "://"; 
path = path.StartsWith("/") ? path : "/" + path;  
string fullUrl = string.Format("{0}{1}{2}", protocol, host, path); 

Những gì tôi thực sự muốn là một số loại API như:

UrlBuilder builder = new UrlBuilder(); 
builder.Protocol = protocol; 
builder.Host = host; 
builder.Path = path; 
builder.QueryString = null; 
string fullUrl = builder.ToString(); 

I gotta tin này tồn tại trong khuôn khổ NET nơi nào đó, nhưng không nơi nào Tôi đã đi qua.

Cách tốt nhất để tạo url không lành mạnh (nghĩa là không bao giờ bị thay đổi) là gì?

+0

câu trả lời đọc Alex Đen, sau đó Click vào đây: http: //social.msdn .microsoft.com/Tìm kiếm/en-US /? Tinh lọc = 27% 2c117 & Query = Uri + Builder –

Trả lời

24

UriBuilder là rất tốt để đối phó với các bit ở phía trước của URL (như giao thức), nhưng cung cấp không có gì ở phía bên chuỗi truy vấn. Flurl [tiết lộ: Tôi là tác giả] cố gắng để lấp đầy khoảng cách đó với một vài tiện ích thông thạo:

using Flurl; 

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!" 
    }); 

Có một người bạn đồng thư viện mới mà extends the fluent chain with HTTP client calls và bao gồm một số tiện lợi testing features. Các gói phần mềm đầy đủ có sẵn 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

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