ASP.NET MVC 2.0 JsonRequestBehavior グローバル設定
-
12-09-2019 - |
質問
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 つのオプションがあります。
Controller.Json(object, string, Encoding) オーバーロードをオーバーライドして、Json(object, string, Encoding, JsonRequestBehavior) を呼び出します。 JsonRequestBehavior.AllowGet 最後の引数として。これをすべてのコントローラーに適用したい場合は、抽象基本コントローラー クラス内でこれを実行し、すべてのコントローラーをその抽象クラスのサブクラスにします。
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
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)