2

我想做的是以下几点:

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

4

3 回答 3

1

如果您不想为 JsonServiceClient Get() 请求提供 URL,似乎没有办法不使用 IReturn。刚刚决定在我的 ServiceStack 实现中创建另一组 DTO,它们本质上是另一个库中真实 DTO 的镜像。然后,当一个请求进入我的 SS DTO 时,我创建另一个库的 DTO,设置每个属性,然后传递它。

不漂亮,但这是迄今为止我能找到的最好的。

于 2013-09-11T20:23:08.790 回答
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");     

然后在服务 Get 或 Post 函数中

      public TestResponse Get(TestRequest request)
      {    
         // request members  hold  the values of the url.
         return  DoBusinessLayerWork(request);
      }
于 2013-09-11T22:13:05.633 回答
0

使用 JsonServiceClient 类型的 Send() 方法是执行此操作的方法。

于 2013-10-04T02:05:52.093 回答