我在另一个线程中被推荐使用时应使用ServiceClient ServiceStack API。
我想创建一个模板函数,可以发布任何类型的对象,如下所示:
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 <{}>'的参数。类型'CreateEquipment'缺少属性createResponse
我认为这意味着我的ServiceModel中缺少了一些东西
答案 0 :(得分:1)
ServiceStack的TypeScript Service Client仅应使用 BaseUrl 构建ServiceStack主机所在的位置,否则,如果不指定参数,则默认情况下它将使用/
:
var client = new JsonServiceClient(environment.apiEndpoint);
您还需要将其与ServiceStack服务中的TypeScript generated DTOs配合使用,可以通过安装@servicestack\cli
npm util来生成它:
$ npm install -g @servicestack/cli
然后使用它从 BaseUrl 生成服务器DTO(应该与environment.apiEndpoint相同):
$ typescript-ref http://example.org
然后,您可以使用它发送填充的请求DTO:
var request = new MyRequest();
var response = await client.post(request);
请注意,您的ServiceStack服务应使用IReturn<T>
(或IReturnVoid)接口标记进行注释,以指定服务响应DTO。
您也可以make API Requests using URLs,但是您需要指定响应DTO 类型,例如,返回
client.get<GetTechnologyResponse>("/technology", { Slug: "ServiceStack" })