標題のメソッドだが、Cookieの仕様と制限を忘れていると手痛い目に合うので注意が必要だ。
例えば以下のような、サーバでキーと値のペアを取り出すための、複合値クッキーを用意したとしよう。有限なリソースであるCookieを、効率よく使うのによく使う手だと思う。
SomeCookie=Key1:Value1,Key2:Value2,Key3:Value3;
このクッキーをサーバに送信するためにCookieContainerにセットするコードを書いたとする。
string cookies = "SomeCookie=Key1:Value1,Key2:Value2,Key3:Value3;";
if (cookieHeaders.Length > 0)
{
container.SetCookies(new Uri("http://hoge.com/hogehoge"), cookies);
}
このCookieは論理的には"SomeCookie"という、一つのCookieとして扱われるのを期待するのだが、実際にセットされたCookieは
SomeCookies = Key1:Value1 Key2:Value2 = Key3:Value3 =
このように、予期していないフォーマットの3つのクッキーとしてサーバに送出されてしまうのだ。
SetCookiesメソッドのリファレンスをみれば、なるほど納得するのだが、シグネチャに文字列パラメタがあると、そのままセットされると思ってしまうのが人の悲しさだ。