2

我找不到解释如何使用多种方法在服务堆栈中实现服务的文档(清除或其他)。所有示例都显示了仅具有一种方法的服务类。我无法想象如果您有一个具有 4+ 方法的服务,那么您真的需要创建 4+ 服务类、4+ 请求 DTO 和 4+ 响应 DTO。(如图所示

例子:

具有 4 种搜索方法的服务(method(Identifer1)、method2(identifer2)、method3(identifer3))

基于请求 DTO(服务堆栈 Wiki创建您的第一个 Web 服务)的文档结构,请求 DTO 的类属性,控制到服务类的路由,(如果我理解正确,但我再次在寻找文档或一个例子)

关于路由的文档有点模糊,因为大多数示例不遵循“您的第一个 Web 服务说明”中为请求/响应 DTo 定义的命名约定

我也读过这篇SO Post,但是在听从了建议之后,我仍然有同样的问题。

4

1 回答 1

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 };
    }
}

我已将请求和响应 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 };
    }
}
于 2012-12-29T23:17:25.833 回答