簡體   English   中英

使用Asp.Net Mvc在Json.Net中等效的JsonRequestBehavior

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM