ASP.NET MVCでCookieが保存されなくて困った話


あらまし

ajaxでActionMethodを呼び出して値をCookieに保存

完了後にページ遷移させて、上記Cookieの値を参照

変更が反映されてない!

原因

AJAXはレスポンスを参照せず、正常終了したか否かしか見てなかった。
なので成功時のActionResultは以下のように返していた。

return new HttpStatusCodeResult(HttpStatusCode.OK);

対処方法

ActionResultを以下のように書き換えた。

return Json("OK");

考察

検証はしていないが、おそらくクライアントに返却するレスポンスヘッダがnew HttpStatusCodeResult(HttpStatusCode.OK)では正しく生成されておらず、Cookieの書き換えが正常に行われていなかった。
Json("OK")ではレスポンスヘッダがきちんと生成されていてCookieの書き換えが正常に行なわれていたものと思われる。

結論

気軽にActionResultにnew HttpStatusCodeResult(HttpStatusCode.OK)を返してはいけない