【问题标题】:RESTful Service Method in WCFWCF 中的 RESTful 服务方法
【发布时间】:2010-12-25 13:01:09
【问题描述】:

我不确定来自 WCF 的 JSON 响应有什么问题,但它没有被正确解析。我可能犯了一个简单的错误,希望有人能发现它。我正在使用 VS 2008 Pro SP1。

当我直接导航到 url 时,Chrome 认为这是一个文件下载。当我点击说 flickr 的服务时,它在浏览器正文中返回了一个内联字符串,这让我认为我的内容发送不正确。

服务

[ServiceContract]
public interface IFoo
{
    [OperationContract]
    [WebGet(UriTemplate = "/foos/", ResponseFormat = WebMessageFormat.Json]
    Foo[] GetFoos();
}

型号

// this is in a separate assembly from the service
[DataContract]
public class Foo
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}

JQuery

$(document).ready(function() {
    $.getJSON(fooUrl, function(data) {
        alert(data); // data is an object, but data.items is null
            // this complains 'length is null or not an object'
            $.each(data.items, function(i, item) { 
                fooList.append('<option value="' + data[i].id + '">' + data[i].name + '</option>');
            });
        });
    });

当我查看 Fiddler 中的响应时,我看到:

 [{"Id":1,"Name":"Foo1"},{"Id":2,"Name":"Foo2"},{"Id":3,"Name":"Foo3"}]

更新

这是来自 fiddler 的原始标头,用于响应比较(me vs. flickr)

我的

HTTP/1.1 200 OK
Content-Length: 162
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0

Flickr

HTTP/1.1 200 OK
Date: Sat, 12 Dec 2009 00:30:36 GMT
P3P: policyref="http://p3p.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Sat, 12 Dec 2009 00:26:19 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: application/x-javascript; charset=utf-8

看起来最大的区别是我有 application/json 而他们有 application/x-javascript。正如我上面提到的,我在操作合同上使用了 WebMessageFormat.Json。

感谢您的帮助。

【问题讨论】:

  • fiddler 说您从您的服务和 flickr 收到什么内容类型?
  • 好问题,我已经更新了 OP

标签: jquery wcf json rest


【解决方案1】:
$.each(<b>data</b>, function(i, item)

删除 .items

【讨论】:

  • 感谢回复,我稍后试试。有趣的是,我从 docs.jquery.com/Ajax/jQuery.getJSON 复制了我的 JQuery
  • 我在我的项目中使用 1.3.1(我有完全相同的例程运行)
  • 这会导致“未定义”列表
  • 现在物品中的情况不重要吗? data[i].Id 不是 id 等
【解决方案2】:

我相信 application/json 是您正在做的正确媒体类型。

浏览器不呈现它并只是为您提供文件下载对话框这一事实并不令人惊讶。浏览器只直接渲染一小部分媒体类型。

这并不意味着您的 Web 服务返回的内容有任何问题。这只是意味着浏览器没有任何内置功能可以将 json 转换为 html 表示以进行显示。

如果您在客户端代码中检索此 json 表示,您应该能够像处理任何其他 json 数据一样处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2016-01-11
    • 1970-01-01
    • 2011-03-23
    相关资源
    最近更新 更多