質問

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

アップデート:Levi のコメントによると、これが私が最終的に使用したものです-

protected override JsonResult Json(object data, string contentType, System.Text.Encoding contentEncoding)
{
    return Json(data, contentType, JsonRequestBehavior.AllowGet);
}
役に立ちましたか?

解決

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

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

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

他のヒント

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

、新しい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
セキュリティ上の理由から、GETリクエストのための

MVC 2ブロックJSON。あなたがその動作をオーバーライドしたい場合は、JsonRequestBehaviorパラメータを受け入れ、JSONのための過負荷をチェックします。

public ActionResult Index()

{

   return Json(data, JsonRequestBehavior.AllowGet)

}

また、私は最初のMVC 1.0に私の古いコードを使用してMVC 2.0を使用して、このエラーを得ました。私は、エラーの原因を特定するためにシオマネキを使用します。 Fidderを使用してそれを解決する方法の手順を参照してください -

<のhref = "http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON()-does-not-tirgger-the-callback-in-ASPNET-MVC-2。 ASPX」REL = "nofollowを"> http://www.rodcerrada.com/post/2011/07/11/jQuery-getJSON()は、未tirgger-コールバック・イン・ASPNET-MVC-2 -does。 ASPXする

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

もしそうなら、あなたは外のウェブサイトへのJSON呼び出しをやろうとしている場合、脆弱性が唯一の問題であるように、それはそうです。あなたのMVC2アプリのみ(例えばjqgridsを埋めるために)あなた自身のウェブサイトにJSON呼び出しを行っている場合は、安全に常に入手?

許可するようにベースコントローラにJSON呼び出しを上書きできないようにする必要があり

ジャストからJSONコードを変更

$.getJson("methodname/" + ID, null, function (data, textStatus)

$.post("methodname/" + ID, null, function (data, textStatus)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top