使用ServiceStack获取getJSON?

时间:2012-07-18 13:51:18

标签: json rest servicestack

服务器端:

[RestService("/x")]
public class XFilter
{
    public long[] CountryIds { get; set; }
}

public class XService : RestServiceBase<XFilter>
{
    private const int PageCount = 20;

    public override object OnGet(XFilter request)
    {
        Debugger.Break(); // request is always default at this point  !!
        return a;
    }
}

客户端:

<script type="text/javascript">

 var requestData= "{CountryIds:[1,2]}";
$.getJSON("/api/x", requestData, function (b) {

});

它必须如此简单,但我无法通过这种方法在服务器端获得XFilter。

2 个答案:

答案 0 :(得分:1)

这是无效的JSON:

var requestData= "{CountryIds:[1,2]}";

必须引用所有字符串,例如:

var requestData= '{"CountryIds":[1,2]}';
var requestData = JSON.stringify({CountryIds:[1,2]}); //same as above

这将是您通过$.ajax POST发送的内容,您可能会考虑这样做,因为没有约定来处理GET请求中的复杂类型,因为它必须将其序列化为queryString。

如果要将复杂类型作为queryString发送,则需要自己构建URL。 ServiceStack使用其JSV Format来处理GET请求中的复杂类型(这只是带有CSV转义的JSON,也就是没有引号的JSON)。

所以你的请求现在是:

var requestData = "[1,2]";
$.getJSON("/api/x?CountryIds=" + requestData, function (b) {
});

Re-Cap:如果你想发送JSON,你需要通过ajax POST这样做。

答案 1 :(得分:0)

var requestData= "{CountryIds:[1,2]}";

必须

var requestData= {CountryIds:[1,2]};

<!/ P>

但仍然存在getJSON问题。它不适用于数组?

Send list/array as parameter with jQuery getJson是解决方案:)

添加:

 $.ajaxSetup({
    traditional: true
});