1

我们正在尝试使用 JsonServiceClient 手动构造自动查询请求。对于大多数操作,代码非常简单,但我看不到过滤器是如何应用的:

var client = new JsonServiceClient('https://my-app.azurewebsites.net');
var req = new dto.something();
req.pageSize = 10;
req.skip = 0;
req.take = 10;

我没有看到如何发送过滤器?

下面是 QueryBase 的实现:

export class QueryBase {
    // @DataMember(Order=1)
    skip: number;

    // @DataMember(Order=2)
    take: number;

    // @DataMember(Order=3)
    orderBy: string;

    // @DataMember(Order=4)
    orderByDesc: string;

    // @DataMember(Order=5)
    include: string;

    // @DataMember(Order=6)
    fields: string;

    // @DataMember(Order=7)
    meta: { [index: string]: string; };
}

最后,javascript/typescript 客户端是否有 ToPostUrl/ToGetUrl 的模拟?

4

1 回答 1

2

TypeScript JsonServiceClient的0.0.23中添加了对查询服务的新支持,这将允许您在查询服务时添加其他参数,例如:

var request = new dto.MyQuery();

client.get(request, {MyField:"TheFilter"})
    .then(r => {});

它还将允许通过带有可选 queryString 参数的相对或绝对 url 调用服务,例如:

client.get<Response>("/my-request/foo")

client.get<Response>("http://example.org/my-request/foo")

client.get<Response>("/my-request", { arg: "foo"})

ServiceStack 只能为AutoQuery Request DTO 上的显式条件生成类型化属性。

JavaScript/TypeScript 中没有 ToPostUrl/ToGetUrl 等价物,但ss-utils中有一些 URL 助手可以帮助创建 URL,例如:

var url = $.ss.createUrl("https://my-app.azurewebsites.net/myquery",   
    {pageSize:10,take:10,MyField:"TheFilter"});

$.getJSON(url, function(r) {
    console.log(r.Results);
});

servicestack-clientnpm 包中也提供了类似的 URL 助手,例如:

import { combinePaths, nameof, appendQueryString } from 'servicestack-client';

let baseUrl = "https://my-app.azurewebsites.net";
let requestDto = new MyQuery();
requestDto.take = 10;

let pathInfo = combinePaths(baseUrl, "json", "reply", nameof(requestDto));
let url = appendQueryString(pathInfo, requestDto);
于 2017-02-28T18:37:32.030 回答