我想做的是以下内容:
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; }
}
APPHOST:
Routes.Add<ProjectQuery>("/project", "GET");
服务:
public object Get(Foo request)
{
// do stuff.
}
是否有一些不错的,干净的方法来创建JsonServiceClient而不使用业务对象上的IReturn接口?
答案 0 :(得分:1)
如果您不想提供JsonServiceClient Get()请求的URL,那么似乎无法使用IReturn。刚刚决定在我的ServiceStack实现中创建另一组DTO,它们实际上是另一个库中真实DTO的镜像。然后当一个请求进入我的SS DTO时,我创建另一个库的DTO,设置每个属性,然后传递它。
不漂亮,但这是迄今为止我能找到的最好的。
答案 1 :(得分:1)
我使用IReturn和Routes时遇到了同样的问题,因为我想使用DTO 在具有业务逻辑的程序集中,没有ServiceStack引用。
对我来说,在客户端模型中使用
public class TestRequest
{
public int vendorId {get; set; }
public string barcode {get; set; }
public string username { get; set; }
public string password { get; set; }
}
然后在AppHost中
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);
或与GET
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);
}
答案 2 :(得分:0)
使用JsonServiceClient类型中的Send()方法是实现此目的的方法。