2013-05-05 68 views
4

我正在使用.net 3.5遷移舊的代碼,它有一些返回json數據的asmx webservices。爲了安全起見,這些服務返回了包含在「.net 3.5」中的「d」屬性上的json。MVC 3 JsonResult沒有d屬性

將這些Web服務移動到mvc控制器操作時,沒有涉及到我的d屬性,因爲「d」屬性是由於某種原因而引入的安全修補程序。

我是否應該將Json結果包裝到d屬性中,還是我做錯了什麼?

public JsonResult GetJsonData() 
    { 
     return Json(2); 
    } 

此輸出:

2 

代替:

{ "d": "2" } 
+0

@ I4V很多在這個網站,例如http://stackoverflow.com/questions/830112/what-does-d-in-json-mean – flup 2013-05-05 19:35:43

+0

閱讀有關d財產這裏:http://encosia.com/never-worry-about-asp-net-ajaxs-d-again/和http://haacked.com/archive/2009/06/25/json-hijacking.aspx – Pete 2013-05-05 19:37:34

+0

你可以通過'return Json(new {d = 2})來實現;'看看這個答案:http://stackoverflow.com/a/10608250/858757 – Silvermind 2013-05-05 19:39:48

回答

2

你做的一切權利。

我不是MVC開發團隊之一,但我認爲它決定不引入d-wrapper以支持與其他世界的兼容性。

但是,他們向保護json響應邁出了一步。默認情況下,你不能在響應返回JSON爲GET請求,所以你必須把額外的條件代碼:

public JsonResult GetJsonData() 
{ 
    return Json(2, JsonRequestBehavior.AllowGet); 
} 

如果你想爲JSON數組敏感數據回GET請求,然後是,你將不得不手動包裝你的數組。

3

試試這個

public JsonResult GetJsonData() 
{ 
    return Json(new {d = 2}, JsonRequestBehavior.AllowGet); 
}