Метод формирует строку запроса из набора пар ключ-значение.
namespace Company
{
#region Using Derectives
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Web;
#endregion Using Derectives
public static class UriQueryUtils
{
#region Fields
public const char QueryDelimeter = '?';
public const char PairDelimeter = '&';
public const char KeyValueDelimeter = '=';
#endregion Fields
#region Methods
public static string Concat(string path, NameValueCollection query) {
if(String.IsNullOrEmpty(path)) {
throw new ArgumentNullException("path");
}//if
string queryString = ToString(query);
return String.Concat(path, QueryDelimeter, queryString);
}
public static string ToString(NameValueCollection query) {
if(query == null) {
throw new ArgumentNullException("query");
}//if
int keysCount = query.Count;
if(keysCount > 0) {
StringBuilder builder = new StringBuilder();
for(int i = 0; i < keysCount; i++) {
if(builder.Length > 0) {
builder.Append(PairDelimeter);
}//if
string key = query.GetKey(i);
key = HttpUtility.UrlEncodeUnicode(key);
key = !String.IsNullOrEmpty(key) ? (key + KeyValueDelimeter) : String.Empty;
string[] values = query.GetValues(i);
switch(values.Length) {
case 0:
builder.Append(key);
break;
case 1: {
builder.Append(key);
string value = HttpUtility.UrlEncodeUnicode(values[0]);
builder.Append(value);
} break;
default:
for(int j = 0; j < values.Length; j++) {
if(j > 0) {
builder.Append(PairDelimeter);
}//if
builder.Append(key);
string value = HttpUtility.UrlEncodeUnicode(values[j]);
builder.Append(value);
}//for
break;
}//switch
}//for
return builder.ToString();
}//if
return String.Empty;
}
#endregion Methods
}
}
Альтернативные способы показал
mogadanez здесьАвтор: mogadanez
Дата: 09.08.06
.
Пример использования:
namespace Company
{
#region Using's
using System;
using System.Collections.Specialized;
using System.Diagnostics;
#endregion Using's
public static class WebSiteUtils
{
#region Fields
private static const string ImagePath = "~/Image.ashx";
public const string ImageTypeParameterName = "ImageType";
public const string ItemIDParameterName = "ItemID";
public const string WidthParameterName = "Width";
public const string HeightParameterName = "Height";
#endregion Fields
#region Methods
public static string GetImageUrl(ImageKind imageKind, Guid id, int? width, int? height) {
NameValueCollection query = new NameValueCollection();
query.Add(ImageTypeParameterName, Convert.ToString(imageKind));
query.Add(ItemIDParameterName, Convert.ToString(id));
query.Add(WidthParameterName, Convert.ToString(width));
query.Add(HeightParameterName, Convert.ToString(height));
string url = UriQueryUtils.Concat(ImagePath, query);
return url;
}
#endregion Methods
}
}