ServiceStack CRUD服务路由文档

Rex*_*ten 2 servicestack

我无法找到解释如何使用多种方法在服务堆栈中实现服务的文档(清除或其他).所有示例都只显示一个方法的服务类.我不能想象如果你有一个4+方法的服务,你真的需要4 +服务类,4 + Request DTO和4+响应DTO.(如此处所示)

例:

具有4种搜索方法的服务(方法(Identifer1),方法2(标识2),方法3(标识3))

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

关于路由的文档有点模糊,因为大多数示例都不遵循已定义的请求/响应DTo的命名约定,如" 您的第一个Web服务解释 "中的大纲

我也读过这篇SO帖子,但是在遵循建议之后,我留下了同样的问题.

Dar*_*rov 5

我不能想象如果你有一个4+方法的服务,你真的需要4 +服务类,4 + Request 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 };
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将请求和响应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 };
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您需要知道的一切都在文档中.剩下的就是卷起袖子开始玩它. (2认同)