代码之家  ›  专栏  ›  技术社区  ›  kindohm

openrasta xml请求作为json返回

  •  3
  • kindohm  · 技术社区  · 15 年前

    我有一个非常简单的openrasta应用程序,它的home资源有一个title的字符串属性(直接来自openrasta community 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());
        }
    });
    

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

    错误:parserror,typeerror:a为空

    但有趣的是。我的请求是这样的:

    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 回复  |  直到 15 年前
        1
  •  4
  •   SerialSeb    15 年前

    迈克,

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

    你没做错什么,这应该行得通。

    您的accept:header指定您的客户机乐于接收application/xml或任何其他内容( / )openrasta很可能假设“任何其他东西”都可以工作,并与json编解码器一起使用。

    如果你把标题改成

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

    那你应该没事的。或者,只需移除 / 一起/

    也就是说,正常 / 在openrasta的内容协商算法中,总是把它作为最后的手段,所以这个结果非常令人惊讶。你在用什么版本的?