openrasta xml请求以json的形式返回

时间:2010-03-04 18:36:30

标签: json jquery openrasta

我有一个非常简单的OpenRasta应用程序,其Home资源具有Title的单个字符串属性(直接来自OpenRasta社区doc示例)。

我为资源设置了XML和JSON数据合同,如下所示:

ResourceSpace.Has.ResourcesOfType<Home>()
    .AtUri("/home")
    .HandledBy<HomeHandler>()
    .AsXmlDataContract()
    .And.AsJsonDataContract();

从jQuery,我能够很好地获取JSON数据。但是,当我发出jQuery XML Ajax请求时,我会收到JSON数据。

我的jQuery代码如下所示:

$.ajax(
{
    url: "/home",
    dataType: "xml",
    success: function(result) {
        $('#xmlSpan').append($(result).find('Title').text());
    },
    error: function(request, status, ex) {
        $('#xmlSpan').append('error: ');
        $('#xmlSpan').append(status + ', ');
        $('#xmlSpan').append(ex.toString());
    }
});

附加的错误信息最终如下所示:

错误:parsererror,TypeError:a为null

但这是有趣的部分。来自Fiddler,我的请求如下:

GET http://127.0.0.1:51041/home HTTP/1.1
Host: 127.0.0.1:51041
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.8) Gecko/20100202 Firefox/3.5.8
Accept: application/xml, text/xml, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
X-Requested-With: XMLHttpRequest
Referer: http://ipv4.fiddler:51041/WebForm1.aspx
Cache-Control: max-age=0

...我的回答如下:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Thu, 04 Mar 2010 18:30:04 GMT
X-AspNet-Version: 2.0.50727
Content-Length: 18
Cache-Control: private
Content-Type: application/json; q=0.5
Connection: Close

{"Title":"Foooo!"}

我的请求是“Accept:application / xml”,但响应是“application / json”(返回的数据显然是json)。

我做错了什么?

1 个答案:

答案 0 :(得分:4)

麦克,

(对不起,我之前没有看到那个问题)

你没有做错任何事情,这应该很好。

您的Accept:标头指定您的客户很乐意接收application / xml或其他任何内容( / )。有可能OpenRasta假设“其他任何东西”都可以工作并与json编解码器一起使用。

如果您将标题更改为

接受:application / xml,text / xml; q = 0.9, / ; q = 0.8

那你就好了。或者,只需删除 / alltogether /

那就是说,normaly / 总是作为openrasta的内容协商算法的最后手段,所以这个结果非常令人惊讶。您使用的是什么版本的OR?