2010年3月26日金曜日

Http GetでJsonをリクエストするとエラーになっちゃう

ASP.NET MVC 2もリリースされて一月ほどたち、正式リリースされてから機能にはキャッチアップすれば良いとPreview, RCと6回もリリースされているものをほぼすべて無視してきたので、MIX10でWhat's New in Microsoft ASP.NET MVC 2があったのには助かった。で、他のビデオやブログでもASP.NET MVCからMVC 2への移行はなんの問題もなくできる、とあったのだが、前述のVideoの中で大変気になる部分があった。それが、今回のブログポストのタイトルにもあるように、Http GetでJsonを取得(正確には返却)しようとするとエラーになるというところだ。まさにWTF。

これはMVC 2でJSONまわりのセキュリティが引き締められたために発生するエラーで、回避策は下記の通り。

// SomethingController.cs
public ActionResult GetJson()
{
 var hoge = "hoge";
 return new JsonResult { Data = hoge, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}

JsonResultのJsonRequestBehaviorにJsonRequestBehavior.AllowGetを指定してやれば良い。まぁJsonを返却する場合はPOSTでリクエストしろよ、という話かもしれないが、jqGridをがんがんに使っているプロジェクトでは無理な話なので、MVC 2に移行するときはしこしこと地道に書き直すしかない。そういえばjqGridの使い方を解説しようとずっと前に思い立ったままになっていたので、良い機会なのでデモページへのリンクを載せておく。

jqGrid demo

検索結果なんかを表示するのにひっじょうに便利なので一見することをおすすめする。

0 件のコメント:

コメントを投稿