Asp.Net MVC3为JsonResult返回零字节

时间:2012-12-21 17:44:20

标签: 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.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,我都无法获得返回非空响应的路由。总是会发生同样的事情:没有反应机构。有响应头,但是主体有零字节的数据。

这是在本地运行,活动目录登录集成正常运行(如果我没有登录,我在父路由/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和用户代理)

GET /mvc/123/concierges/ConciergeRead HTTP/1.1
Host: localhost:7171
Connection: keep-alive
Cache-Control: max-age=0
Authorization: Negotiate oXcwdaADCgEBoloEWE5UTE1TU1AAAwAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAABXCiOIGAbEdAAAADxZEeKqgJFuPmHxoeEOwIJWjEgQQAQAAAPUXp1AtIpqEAAAAAA==
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASP.NET_SessionId=zctn1diidxyookfgq11rx1uy
来自kendo UI发起的Ajax请求的

请求标头(这个是FF,但是等等)

GET /mvc/123/concierges/ConciergeRead HTTP/1.1
Host: localhost:7171
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Referer: http://localhost:7171/mvc/123/Concierges/
Cookie: ASP.NET_SessionId=4ff34okn0jkkwqi3k0qswb4l
Cache-Control: max-age=0

我采取的步骤

  • 调试代码,验证路由是否正确点击
  • 验证GetConcierges()返回数据,序列化为json,序列化为字符串并且看起来正确
  • Chrome,FF和IE9
  • 不同的接受动词
  • 返回类型为JsonResult而不是ActionResult

即使您没有解决方案,也会非常感谢其他调试步骤。

1 个答案:

答案 0 :(得分:3)

您需要先允许JSON结果:

var json2 = Json(sorted, "text/x-json");

作为

return Json(json2, JsonRequestBehavior.AllowGet);

它被禁用以防止JSON劫持,因此在发送敏感信息时不要使用此东西(然后在响应的主体中返回敏感数据)