【问题标题】:why response.d returns null while response has a valid set of results - in asp.net web api为什么response.d返回null而response有一组有效的结果-在asp.net web api中
【发布时间】:2015-03-13 05:54:12
【问题描述】:

我正在尝试在我的应用程序中使用 Web Api。一切似乎都在接受读取 json 数据。下面是我调用 web api 方法的 jQuery 代码,以及变量的值。如您所见,response.d 返回一个未定义的值,而response 实际上有一组值。

这里是web api方法:

        public IEnumerable<DiscussionWall> GetDiscussionWallsByCourse(int courseid)
    {
        gEchoLuDBContext db = new gEchoLuDBContext();
        var discussionwalls = db.DiscussionWalls.Where(dw => dw.CourseId == courseid);

        if (discussionwalls == null)
            throw new HttpResponseException(HttpStatusCode.NotFound);
        else
            return discussionwalls;
    }

为什么在这种情况下我不能简单地使用 response.d?响应格式为{ $id="1", $values=[3] }?如何读取 $values 数组?

【问题讨论】:

  • 在这种情况下 d 是什么?您的响应包含一个对象列表。我对吗?尝试对其进行索引。响应[0]
  • @RohitArora、ASP.NET 和 WCF JSON 服务端点实际上将它们的 JSON 包装在一个具有“d”属性的对象中,以规避使用 JSON 时的潜在安全漏洞 (haacked.com/archive/2008/11/20/…)。另外,当我使用var a = response[0] 时,a 是未定义的。
  • WebApi 在响应中不使用.d
  • 另外,discussionwalls 永远不会为空,但它可以为空。

标签: c# jquery asp.net ajax asp.net-web-api


【解决方案1】:

以下行解决了这个问题。

var discussionwalls = response['$values'];

但是,我想知道这是否会产生安全问题,并且我想知道为什么 response.d 在这种情况下不起作用。有人有想法吗?

【讨论】:

  • 从您链接的文章看来,对于现代浏览器来说这不是问题。 “好消息是,在我看来,大多数现代浏览器都不受此影响。我有一个 URL,您可以单击该 URL 来演示该漏洞利用,但您必须使用 FireFox 2.0 或更早版本才能使该漏洞利用工作。它不适用于 IE 6、7、8、FireFox 3 或 Google Chrome。"
  • @jrummell 我明白了。但是,我找不到使用response['$values']; 的任何其他示例,您是否有任何不使用.d 从响应中检索值(数组类型)的Web api 示例?
  • 当您可以正常访问数组时,我不确定为什么要使用response[$values]。我还没有看到任何 .d 的示例,但一个很好的起点是 here
  • @jrummell 实际上,我检查了该资源。然而,有趣的是,就我而言,使用response 不起作用。它仅在我使用response['$values']; 时才有效。当我调试它并悬停响应时,这就是我所看到的:object { $id="1", $values=[3] }
  • 如果你返回discussionwalls.ToArray()怎么办?从技术上讲,您现在正在序列化 DbQuery&lt;T&gt;
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 2011-09-29
  • 2017-09-08
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多