1

服务器端:

[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。

4

2 回答 2

1

这不是有效的 JSON:

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

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

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

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

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

所以你的请求现在是:

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

Re-Cap:如果您想发送 JSON,您需要通过 ajax POST 发送。

于 2012-07-18T15:37:15.177 回答
0
var requestData= "{CountryIds:[1,2]}";

一定是

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

但是getJSON还是有问题。它不适用于数组?

使用 jQuery getJson 发送列表/数组作为参数是它的解决方案:)

添加这个:

 $.ajaxSetup({
    traditional: true
});
于 2012-07-18T14:14:07.123 回答