Ответ 1
Посмотрите класс UriBuilder
Я продолжаю чувствовать, что я изобретаю колесо, поэтому я подумал, что попрошу толпу здесь. Представьте, что у меня есть фрагмент кода:
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
Я хочу создать url http://www.google.com/plans/worlddomination.html". Я продолжаю делать это, написав дрянной код следующим образом:
protocol = protocol.EndsWith("://") ? protocol : protocol + "://";
path = path.StartsWith("/") ? path : "/" + path;
string fullUrl = string.Format("{0}{1}{2}", protocol, host, path);
То, что я действительно хочу, это какой-то API вроде:
UrlBuilder builder = new UrlBuilder();
builder.Protocol = protocol;
builder.Host = host;
builder.Path = path;
builder.QueryString = null;
string fullUrl = builder.ToString();
Я должен полагать, что это существует в .NET framework где-то, но нигде я не сталкивался.
Каков наилучший способ создания надежных (т.е. некорректных) URL-адресов?
Посмотрите класс UriBuilder
UriBuilder
отлично подходит для работы с битами в начале URL (например, протокол), но ничего не предлагает на стороне строки запроса. Flurl [раскрытие: я автор] пытается заполнить этот пробел с некоторой беглостью:
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!"
});
Существует новая сопутствующая библиотека, которая расширяет свободную цепочку с помощью клиентских вызовов HTTP и включает в себя некоторые изящные функции тестирования. Полный пакет доступен на NuGet:
PM> Install-Package Flurl.Http
или просто автономный построитель URL-адресов:
PM> Install-Package Flurl