[英]JsonRequestBehavior equivalent in Json.Net with Asp.Net Mvc
從ASP.NET MVC2開始,當您嘗試在沒有其他信息的情況下返回Json結果時,會出現錯誤:
此請求已被阻止,因為當在GET請求中使用敏感信息時,可能會向第三方網站公開敏感信息。
現在,您必須設置屬性JsonRequestBehavior
的值AllowGet
:
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
我在帖子上看到這可以防止劫持。
我想知道是否有與Json.Net相當的東西來防止這種類型的攻擊。
這是我創建Json結果的代碼:
protected JsonNetResult JsonNet(object data)
{
JsonNetResult result = new JsonNetResult();
result.Data = data;
return result;
}
如果你想知道我在哪里找到了JsonNetResult, 這里有一個鏈接 。
非常感謝你。
您不需要它,因為在您顯示的自定義JsonNetResult
中沒有這樣的測試。 因此,如果使用GET調用操作,您將永遠不會得到像標准JsonResult
那樣的異常。
如果您希望可以在自定義JsonNetResult
屬性上實現完全相同的屬性。
public class JsonNetResult : ActionResult
{
public JsonNetResult()
{
SerializerSettings = new JsonSerializerSettings();
JsonRequestBehavior = JsonRequestBehavior.DenyGet;
}
public JsonRequestBehavior JsonRequestBehavior { get; set; }
....
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
var httpMethod = context.HttpContext.Request.HttpMethod;
if (JsonRequestBehavior == JsonRequestBehavior.DenyGet &&
string.Equals(httpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("You can't access this action with GET");
}
...
}
}
如果你想明確允許這個特定的動作:
protected ActionResult JsonNet(object data)
{
JsonNetResult result = new JsonNetResult();
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
result.Data = data;
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.