別のスレッドで、ServiceStackAPIを使用するときにServiceClientを使用することをお勧めしました。
次のような任意のタイプのオブジェクトを投稿できるテンプレート関数を作成したいと思います。
public Post2<T>(object: T, url: string, httpOptions)
{
try
{
var client = new JsonServiceClient(`${environment.apiEndpoint}` + url)
client.headers = httpOptions;
client.post<T>(object);
}
catch(e)
{
}
}
問題は、「タイプTの引数はタイプIReturnのパラメーターに割り当てることができない」ということです。
typescript-ref http://techstacks.ioは、次のDTOを生成しました(この目的のために)
// @Route("/Equipments", "POST")
export class CreateEquipment
{
public name: string;
}
// @Route("/Equipments/{Name}", "GET")
export class GetEquipment implements IReturn<Equipment>
{
public name: string;
public createResponse() { return new Equipment(); }
public getTypeName() { return 'GetEquipment'; }
}
// @Route("/Equipments", "GET")
export class GetEquipments implements IReturn<Equipment[]>
{
public createResponse() { return new Array<Equipment>(); }
public getTypeName() { return 'GetEquipments'; }
}
// @Route("/Equipments/{Name}", "DELETE")
export class DeleteEquipment
{
public name: string;
}
次のコードを使用してPostリクエストを作成しようとしました。
var request = new CreateEquipment();
request.name = equipment.name;
var client = new JsonServiceClient(environment.apiEndpoint);
var response = await client.post(request);
これにより、VS17でエラーが発生します。タイプ「CreateEquipment」の引数をタイプ「IReturn <{}>」のパラメータに割り当てることはできません。プロパティcreateResponseがタイプ「CreateEquipment」にありません
私が推測するのは、ServiceModelに何かが欠けていることを意味します
ServiceStackのTypeScriptサービスクライアントは、ServiceStackホストが配置されている場所のBaseUrlでのみ構築する必要があります。引数を指定しない場合は/
、デフォルトで使用されます。
var client = new JsonServiceClient(environment.apiEndpoint);
また、npmutilをインストールして生成できるServiceStackサービスからTypeScriptで生成されたDTOで使用する必要があります@servicestack\cli
。
$ npm install -g @servicestack/cli
その後から、あなたのサーバーのDTOを生成するためにそれを使用してBASEURL(environment.apiEndpointと同じでなければなりません):
$ typescript-ref http://example.org
次に、それを使用して、入力されたリクエストDTOを送信できます。
var request = new MyRequest();
var response = await client.post(request);
ServiceStackサービスにはIReturn<T>
、サービス応答DTOを指定する(またはIReturnVoid)インターフェイスマーカーで注釈を付ける必要があることに注意してください。
URLを使用してAPIリクエストを行うこともできますが、返される応答DTOタイプを指定する必要があります(例:
client.get<GetTechnologyResponse>("/technology", { Slug: "ServiceStack" })
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加