Ответ 1
BradVin QueryString Builder класс хорош. Свободный интерфейс и поддержка шифрования.
Также стоит проверить этот класс UrlBuilder в CodeProject. Как и System.UriBuilder, лучше поддерживать работу с QueryString.
Я часто заканчиваю свой собственный метод обертки/расширения для/вокруг System.Uri и задавался вопросом, знает ли кто-нибудь о хорошей реализации с открытым исходным кодом. Что мне больше всего нравится, так это параметрирование параметров запроса, создание новой строки запроса (это ключ) и замена имен страниц. Есть хорошие, или System.Uri достаточно для вас?
BradVin QueryString Builder класс хорош. Свободный интерфейс и поддержка шифрования.
Также стоит проверить этот класс UrlBuilder в CodeProject. Как и System.UriBuilder, лучше поддерживать работу с QueryString.
Flurl [раскрытие: Я автор] - это свободно создатель URL, который выглядит так:
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!"
});
Если вы создаете URL-адреса с целью их вызова, Flurl.Http является сопутствующей библиотекой, которая позволяет вам выполнять HTTP с Свободная цепь:
await "https://api.mysite.com"
.AppendPathSegment("person")
.SetQueryParams(new { ap_key = "my-key" })
.WithOAuthBearerToken("MyToken")
.PostJsonAsync(new { first_name = firstName, last_name = lastName });
Получить полный пакет на NuGet:
PM> Install-Package Flurl.Http
или просто автономный построитель URL:
PM> Install-Package Flurl
Мы используем собственный альтернативный класс Uri, который, как вы говорите, частично основан на Uri. Тем не менее, я думаю, что существует важное различие - System.Uri, как правило, призвана быть неизменной - или, точнее, вести себя неизменно. Как только кто-то появляется, он представляет собой точное универсальное местоположение/конечная точка ресурса. Если вам нужно описать другое местоположение, вы должны создать новый Uri, но не изменить существующий.
Существует отдельный класс, который специализируется на выпуске Uri's: UriBuilder.
Между System.Uri
и System.UriBuilder
, какие функции вы точно не видите из этих двух?
/// <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();
}
В CodePlex есть очень красивый новый проект с открытым исходным кодом, который позволяет читать, писать, шифровать Uris и немного больше. Проверьте их!
Я не уверен точно, что вы пытаетесь сделать (примеры помогут), но похоже, что вы пытаетесь получить некоторые функции Apache mod_rewrite в ASP.NET.
Существует статья в MSDN об этом.