ServiceStack AutoQuery отправляет фильтр вручную

Мы пытаемся использовать 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; };
}

Наконец, есть ли аналог ToPostUrl/ToGetUrl для клиента javascript/typcript?

1 ответ

Решение

Новая поддержка запросов к сервисам была добавлена ​​в 0.0.23 TypeScript JsonServiceClient, что позволит вам добавлять дополнительные аргументы при запросах к сервисам, например:

var request = new dto.MyQuery();

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

Это также позволит вызывать сервисы по относительной или абсолютной ссылке с необязательными аргументами queryString, например:

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

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

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

ServiceStack может генерировать только типизированные свойства для явных условий в DTO запроса AutoQuery.

В 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);
});

Аналогичные URL-помощники также доступны в servicestack-client пакет npm, например:

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);
Другие вопросы по тегам