我有一个关于iI应如何从其他服务中使用ServiceStack服务的问题。
我已经针对我的所有请求回复了DTO,这实现了IReturn
接口。对于像JsonServiceClient
这样的客户端,当我发出请求时,它返回对象响应,其类型在IReturn
中实现,太棒了!
现在我正在重新考虑为将来的项目中使用的服务编写插件的项目,当我在另一个服务中注入服务并发出请求时,它返回对象类型,所以我必须将它转换为HttpResult
,然后将对象响应转换为DTO类型。
在我的大多数服务方法签名中,我将对象作为返回类型,然后返回带有响应的HttpResult
。例如:
public object Get(Request request)
{
return new HttpResult(responseObj);
}
除了从客户端使用服务之外,我还有其他选择吗?
我有一个服务和DTO仅用于视图,它使用插件中的其他服务。这就是我需要正确获取响应DTO的原因(视图服务就像控制器一样)。
答案 0 :(得分:2)
我恐怕没有理解你的问题,我不在主题,
但我会使用相同的响应对象,只更改请求。
服务模型中的
public class TestRequest : IReturn<TestResponse>
{
public int Id { get; set; }
public string name { get; set; }
}
public class LowLevelRequest : IReturn<TestResponse>
{
public int Id { get; set; }
public string name { get; set; }
public string permissions { get; set; }
}
public class TestResponse
{
public bool success { get; set; }
public string message { get; set; }
}
路由表中的
Routes
.Add<TestRequest>("/TestAPI/{Id}", "POST,GET, OPTIONS")
.Add<LowLevelRequest>("/InternalAPI/{Id}", "POST,GET, OPTIONS");
服务中的
public TestResponse Post(TestRequest request)
{ JsonServiceClient client=new JsonServiceClient();
LowLevelRequest lowrequest=new LowLevelRequest() { Id=request.Id, name=request.name, permissions="RW" }
return client.Post<TestResponse>(lowrequest);
}
public TestResponse Post( LowLevelRequest request)
{ ....
return new TestResponse() { success=true, message="done" };
}