39

ASP.NET MVC 2.0 は、アクションが GET 要求に応答して JSON を返そうとすると、既定で例外をスローするようになりました。これは、JsonRequestBehavior.AllowGet を使用してメソッドごとにオーバーライドできることはわかっていますが、コントローラーまたはそれ以上 (おそらく web.config) で設定することは可能ですか?

更新:リーバイスのコメントによると、これは私が最終的に使用したものです-

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
    return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
4

6 に答える 6

27

これは、他の MVC 固有の設定と同様に、Web.config では設定できません。ただし、次の 2 つのオプションがあります。

  1. Controller.Json(object, string, Encoding) オーバーロードをオーバーライドして Json(object, string, Encoding, JsonRequestBehavior) を呼び出し、 JsonRequestBehavior.AllowGetを最後の引数として渡します。これをすべてのコントローラーに適用する場合は、抽象基本コントローラー クラス内でこれを行い、すべてのコントローラーをその抽象クラスのサブクラスにします。

  2. JsonResult を作成し、適切なプロパティを設定する拡張メソッド MyJson(this Controller, ...) を作成し、this.MyJson(...) を介してコントローラーから呼び出します。

于 2009-11-03T08:52:19.377 に答える
24

別のオプションがあります。アクション フィルターを使用します。

新しい ActionFilterAttribute を作成し、それをコントローラーまたは特定のアクション (必要に応じて) に適用します。これで十分です:

public class JsonRequestBehaviorAttribute : ActionFilterAttribute
{
    private JsonRequestBehavior Behavior { get; set; }

    public JsonRequestBehaviorAttribute()
    {
        Behavior = JsonRequestBehavior.AllowGet;
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var result = filterContext.Result as JsonResult;

        if (result != null)
        {
            result.JsonRequestBehavior = Behavior;
        }
    }
}

次に、次のように適用します。

[JsonRequestBehavior]
public class Upload2Controller : Controller
于 2011-01-01T15:05:46.210 に答える
3

MVC 2 は、セキュリティ上の理由から、GET リクエストの Json をブロックします。その動作をオーバーライドする場合は、JsonRequestBehavior パラメーターを受け入れる Json のオーバーロードを確認してください。

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}
于 2010-04-20T14:36:41.770 に答える
1

MVC 1.0 で古いコードを使用して MVC 2.0 を初めて使用したときにも、このエラーが発生しました。エラーの原因を特定するためにフィドラーを使用します。Fidder を使用してトラブルシューティングする方法の手順を参照してください -

http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON()-does-not-tirgger-the-callback-in-ASPNET-MVC-2.aspx

于 2011-07-11T12:06:41.123 に答える
0

これは、MVC2 が対処しようとしていたセキュリティ上の問題ですか? http://haacked.com/archive/2009/06/25/json-hijacking.aspx

もしそうなら、脆弱性は、外部の Web サイトに対して json 呼び出しを実行しようとしている場合にのみ問題になるようです。MVC2 アプリが独自の Web サイトに対して json 呼び出しのみを行っている場合 (たとえば、jqgrid を埋めるため)、ベース コントローラーで Json 呼び出しを安全にオーバーライドして、常に get を許可することはできませんか?

于 2010-11-22T16:25:42.110 に答える