C# クエリストリング(?var=hoge&...)を作る

C#でクエリストリングを作る方法の備忘録です。

クエリストリングは、URLのパスの後ろに?変数名1=値1&変数名2=値2&...といった形で任意の値が渡される文字列です。例えば以下のような文字列です。

http://ohke.hateblo.jp/search?q=Python&page=1504879200

LINQで文字列を連結することもできますが、' '(スペース)や'&'(アンパサンド)などの特殊記号をエスケープする必要があったりするため、自前での実装は避けたほうがいいです。

かわりにSystem.Web.HttpUtility.ParseQueryString.aspx)メソッドを使うと、安全かつ容易にクエリストリングを生成できます。

  • ' 'や'&'などはパーセントエンコーディングされています
var query = System.Web.HttpUtility.ParseQueryString("");

query.Add("name", "Tanaka, Ichiro");
query.Add("childs", "jiro&saburo");

var queryString = query.ToString();

Console.WriteLine(queryString);
// name=Tanaka%2c+Ichiro&childs=jiro%26saburo

生成されたクエリストリングをSystem.UriBuilder.aspx)クラスに渡せば、URIも一発生成できます。

var uriBuilder = new System.UriBuilder("example.host.name") {
    Query = query.ToString()
};

Console.WriteLine(uriBuilder.Uri);
// http://example.host.name/?name=Tanaka%2c+Ichiro&childs=jiro%26saburo