2013-05-05 71 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); 
}