1

Wir versuchen, den JsonServiceClient zu verwenden, um Autoabfrageanforderungen manuell zu erstellen. Der Code ist ziemlich einfach für die meisten Operationen, aber ich sehe nicht, wie Filter angewendet werden:ServiceStack AutoQuery Sendefilter manuell

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

Was ich nicht sehe, wie Filter schicken? Hier

ist die Implementierung von 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; }; 
} 

Schließlich ist es ein Analog-ToPostUrl/ToGetUrl für die Javascript/Typoskript-Client?

Antwort

2

Neue Unterstützung für die Abfrage von Dienstleistungen in 0.0.23 der TypeScript JsonServiceClient hinzugefügt wurden, die Sie zusätzliche Argumente hinzufügen lassen, wenn Dienste abfragen, zB:

var request = new dto.MyQuery(); 

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

Es wird auch Call-Dienste durch eine relative oder absolute lassen uRL mit optionalen querystring Argumente, zum Beispiel:

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

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

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

ServiceStack kann nur erzeugen typisierten propert ies für Explicit Conditions on your AutoQuery Request DTO.

Es gibt keine ToPostUrl/ToGetUrl äquivalent in JavaScript/Typoskript, aber es gibt einige URL helpers in ss-utils, welche URLs erstellen helfen kann, zum Beispiel:

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

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

ähnliche URL-Helfer auch im servicestack-client npm-Paket zur Verfügung, zum Beispiel:

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); 
+0

Wollen Sie sagen, dass der JsonServiceClient kein guter Kandidat zum Senden von Autoanfragen ist? Die Sache ist, dass es so schön ist, in der Lage zu sein, Typescript zu verwenden, um die Anfrage zu erstellen, anstatt String-URLs zu verwenden. – lucuma

+0

@lucuma zum Senden typisierter Anforderungs-DTOs, wenn Sie Eigenschaften in Ihrem Anforderungs-DTO hinzufügen, erscheinen sie in den generierten TypeScript-DTOs. – mythz

+0

Ich habe deinen Punkt verstanden, nur dass skip, take, orderby usw. in Querybase sind, aber die Filter sind nicht so, dass ich dachte, ich hätte etwas übersehen. – lucuma