Asp.Net MVC3为JsonResult返回零字节
我已经做了所有我认为应该做的调试,但找不到任何与正在发生的事情完全匹配的东西。这是代码,在所有的调试荣耀/愚蠢Asp.Net MVC3为JsonResult返回零字节,asp.net,json,asp.net-mvc-3,kendo-ui,iis-express,Asp.net,Json,Asp.net Mvc 3,Kendo Ui,Iis Express,我已经做了所有我认为应该做的调试,但找不到任何与正在发生的事情完全匹配的东西。这是代码,在所有的调试荣耀/愚蠢 [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] public ActionResult ConciergeRead([DataSourceRequest] DataSourceRequest request) { var concierges = GetConcierges(); var sorted = concierges
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult ConciergeRead([DataSourceRequest] DataSourceRequest request)
{
var concierges = GetConcierges();
var sorted = concierges.ToDataSourceResult(request);
var json = Json(concierges, "text/x-json");
string jsonString = new JavaScriptSerializer().Serialize(json.Data);
var json2 = Json(sorted, "text/x-json");
return json;
}
ToDataSourceResult
位是Kendo UI的一部分,是MVC的Telerik扩展,但排除Kendo UI位并不能解决问题。无论从哪个浏览器调用,无论是Ajax请求还是浏览器中的直接get,我都无法获得返回非空响应的路由。同样的事情总是发生:没有反应体。有响应头,但正文中没有数据字节
这是在本地运行的,active directory登录集成工作正常(如果我不登录,我会在父路径/mvc/123/concierges
上得到禁止,如果我直接点击Ajax路径)。服务器是通过visual studio 2012启动的IIS Express 8.0
响应标题
HTTP/1.1 200 OK
Cache-Control: private
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcTGVhZE1hc3RlclxMYXRlc3RccGxhdGZvcm1cTGVhZE1hc3RlclBsYXRmb3JtXEF3bC5MZWFkTWFzdGVyLk12Y1wxMjNcY29uY2llcmdlc1xDb25jaWVyZ2VSZWFk?=
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Fri, 21 Dec 2012 17:19:38 GMT
Content-Length: 0
从直接浏览器获取的请求标题(这是chrome,但FF是相同的,具有不同的cookie和用户代理)
来自由剑道UI发起的Ajax请求的请求头(这是FF,但以此类推)
我采取的步骤
- 调试到代码中,验证路由是否正确命中
- 验证了
返回数据,序列化为json,序列化为字符串,整个过程看起来都是正确的GetConcierges()
- 铬、FF和IE9
- 不同的接受动词
- 返回类型为JsonResult而不是ActionResult
即使您没有解决方案,也非常感谢您执行额外的调试步骤。您需要首先允许JSON结果:
var json2 = Json(sorted, "text/x-json");
作为
禁用此选项是为了防止JSON劫持,因此在发送敏感信息时不要使用此选项(然后在响应正文中返回敏感数据)您需要首先允许JSON结果:
var json2 = Json(sorted, "text/x-json");
作为
它被禁用是为了防止JSON劫持,因此在发送敏感信息时不要使用此选项(然后在响应的正文中返回敏感数据)JsonResult在哪里?您使用的是ActionResult??JsonResult是从ActionResult派生的,因此这应该可以正常工作。此外,在概述的调试步骤中,据说他尝试将返回类型切换为JsonResult,但没有改变行为。JsonResult是ActionResult。实际上,他使用Json方法JsonResult继承自ActionResult。我在问题中说,我已经尝试使用这两种方法。在网上有很多关于两者都起作用的例子,但对我来说都不起作用。JsonResult在哪里?您使用的是ActionResult??JsonResult是从ActionResult派生的,因此这应该可以正常工作。此外,在概述的调试步骤中,据说他尝试将返回类型切换为JsonResult,但没有改变行为。JsonResult是ActionResult。实际上,他使用Json方法JsonResult继承自ActionResult。我在问题中说,我已经尝试使用这两种方法。在网络上有很多这样的例子,它们都起作用,但对我来说都不起作用。我以前遇到过这种情况,认为你可能是对的,但是,我记得在这种情况下,非常好的错误报告告诉了你确切的解决方法。是的,就是这样。我的疏忽令人尴尬,但我认为AcceptVerb足以克服任何允许/拒绝行为。现在我在寻找
JsonRequestBehavior
,已经有人在报道这一点了。我完全看不到这背后的任何迹象。mklinker,关于我应该在哪里查找的任何提示?我以前遇到过这个问题,并且认为您可能是对的,但是,我记得在那个场景中非常好的错误报告告诉了您确切的解决方法。是的,就是这样。我的疏忽令人尴尬,但我认为AcceptVerb足以克服任何允许/拒绝行为。现在我在寻找JsonRequestBehavior
,已经有人在报道这一点了。我完全看不到这背后的任何迹象。mklinker,关于我应该去哪里找有什么建议吗?
var json2 = Json(sorted, "text/x-json");
return Json(json2, JsonRequestBehavior.AllowGet);