ServiceStack:在DTO中没有IReturn的JsonServiceClient用法

时间:2013-09-11 17:17:26

标签: c# servicestack

我想做的是以下内容:

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接口?

3 个答案:

答案 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()方法是实现此目的的方法。