ServiceStack:在DTO中使用JsonServiceClient,无需IReturn
本文关键字:JsonServiceClient 无需 IReturn DTO ServiceStack | 更新日期: 2023-09-27 18:30:54
我想做的是:
var client = new JsonServiceClient(ServiceUrl);
var request = new FooQuery {Id = 1};
IEnumerable<Project> response = client.Get(request);
但是,我的 FooQuery 没有实现任何 IReturn,我希望它不会实现(它位于没有 ServiceStack 引用的库中)。这是我的服务方面:
业务对象库:
public class ProjectQuery
{
public int Id { get; set; }
}
应用主机:
Routes.Add<ProjectQuery>("/project", "GET");
服务:
public object Get(Foo request)
{
// do stuff.
}
有没有一些不错的、干净的方法来创建 JsonServiceClient,而无需在我的业务对象上使用 IReturn 接口?
如果您不想提供 JsonServiceClient Get() 请求的 URL,看起来没有办法不使用 IReturn。刚刚决定在我的 ServiceStack 实现中创建另一组 DTO,它们本质上是另一个库中真实 DTO 的镜像。然后,当请求进入我的 SS DTO 时,我创建其他库的 DTO,设置每个属性,并将其传递出去。
不漂亮,但这是我迄今为止能找到的最好的。
我在使用IReturn和Routes时遇到了同样的问题,因为我想使用DTO
。在具有业务逻辑的程序集中,没有服务堆栈引用。
它对我有用,在客户端模型中使用
public class TestRequest
{
public int vendorId {get; set; }
public string barcode {get; set; }
public string username { get; set; }
public string password { get; set; }
}
然后在应用程序主机中
Routes.Add<TestRequest( "/TestAPI/Reservation/{vendorId}/{barcode}"," GET,OPTIONS")
.Add<TestRequest>("/TestAPI/Reservation", "POST, OPTIONS")
以及使用 POST 调用 JsonServiceClient
request.vendorId=12344;
request.barcode="AAS1223";
TestResponse response = client.Post<TestResponse>(server_ip + "/TestAPI/Reservation", request);
或与获取
TestResponse response = client.Get<TestResponse>(server_ip + "/TestAPI/Reservation/12344/AAS1223?username=John&password=99");
然后在服务中获取或发布函数
public TestResponse Get(TestRequest request)
{
// request members hold the values of the url.
return DoBusinessLayerWork(request);
}
使用 JsonServiceClient 类型的 Send() 方法是执行此操作的方法。