[ASP.NET, C#] ParseQueryString наоборот
От: _FRED_ Черногория
Дата: 09.08.06 16:36
Оценка: 3 (1)
Метод формирует строку запроса из набора пар ключ-значение.

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
  }
}
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.