2012-12-29 41 views
2

我無法找到說明如何使用多種方法在服務堆棧中實現服務的文檔(清除或其他)。所有示例僅顯示一個服務類。我無法想象如果你有4種以上方法的服務,你真的需要做4個以上的服務類,4個請求DTO和4個以上的DTO響應。 (As shown hereServiceStack CRUD服務路由文檔

實施例:

A服務與4種搜索方法(方法(Identifer1),方法2(identifer2),方法3(identifer3))

基於請求DTO的記錄結構(Service Stack Wiki ,和Creating your First Web Service),請求DTO的類屬性,控制到服務類的路由(如果我理解正確,但我正在尋找文檔或示例)

有關路由的文檔有點模糊,因爲大多數例子都不遵循定義ed命名約定爲「Your First Web Service Explained

請求/響應DTo的概述我也讀過這個SO Post,但是我在遵循建議後仍然留下相同的問題。

+0

謝謝,但有時2 + 2!= 5.另外一個建議。 –

回答

5

我無法想象如果你有4種以上方法的服務,你真的需要4+服務類,4+請求DTO和4+響應DTO。

不,您需要1個服務類與4個方法 - 每個方法當然採取請求Dto和返回響應Dto。顯然,對於一些方法,你可能不需要響應DTO

例如,這裏是如何用5種方法典型的服務可能是這樣的:

public class ProductsService: Service 
{ 
    [Route("/products")] 
    public class GetProductsRequest: IReturn<List<ProductResponse>> {} 

    public class ProductResponse 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public object Get(GetProductsRequest request) 
    { 
     IEnumerable<ProductResponse> response = ... 
     return response; 
    } 

    [Route("/products/{id}")] 
    public class GetProductRequest: IReturn<ProductResponse> 
    { 
     public int Id { get; set; } 
    } 

    public object Get(GetProductRequest request) 
    { 
     ProductResponse response = ... 
     return response; 
    } 

    [Route("/products")] 
    public class CreateProductRequest 
    { 
     public string Name { get; set; } 
    } 

    public object Put(CreateProductRequest request) 
    { 
     ... create the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Created }; 
    } 

    [Route("/products/{id}")] 
    public class UpdateProductRequest 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public object Patch(UpdateProductRequest request) 
    { 
     ... update the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 

    [Route("/products/{id}")] 
    public class DeleteProductRequest 
    { 
     public int Id { get; set; } 
    } 

    public object Delete(DeleteProductRequest request) 
    { 
     ... delete the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 
} 

我已經把Request和Response DTO的嵌套類該服務,但它會使它更具可讀性,讓他們在單獨的文件中:

public class ProductsService: Service 
{ 
    public object Get(GetProductsRequest request) 
    { 
     IEnumerable<ProductResponse> response = ... 
     return response; 
    } 

    public object Get(GetProductRequest request) 
    { 
     ProductResponse response = ... 
     return response; 
    } 

    public object Put(CreateProductRequest request) 
    { 
     ... create the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Created }; 
    } 

    public object Patch(UpdateProductRequest request) 
    { 
     ... update the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 

    public object Delete(DeleteProductRequest request) 
    { 
     ... delete the product here 
     return new HttpResult { StatusCode = HttpStatusCode.Accepted }; 
    } 
} 
+0

非常感謝。我想我從這個例子中學到了很多。告訴我你沒有從文檔中獲取這個信息? –

+2

您需要知道的一切都在文檔中。其餘的來自你的袖子,並開始玩它。 –

+0

我在文檔中找不到這個實現(原始問題)再次看到這個後,我可以看到爲什麼文檔中的例子是這樣寫的。我希望以上內容在文檔中,並附上你給出的解釋。 –