ServiceStack - 继承Single Restservice中的所有DTO资源

时间:2011-07-18 06:43:36

标签: c# servicestack

如何在一个服务中继承所有DTO资源?

比如说,

我有资源类:

[RestService("/getstudentname", "GET,POST,PUT,OPTIONS")] 
public class RestResourcename 
{ 
public string Name { get; set; } 
}

[RestService("/getstudentID", "GET,POST,PUT,OPTIONS")] 
public class CNextRestResourceid 
{ 
 public string Name { get; set; } 
} 

我有我的服务类: 1.如何在本服务中继承另一个DTO课程???????? 我需要为此创建单独的课程吗?

public class CnextRestService : RestServiceBase<RestResourcename> 
{ 
 public override object OnGet(RestResourcename request) 
 { 
    return request; 
 } 
} 

请就此问题向我提出建议.......

1 个答案:

答案 0 :(得分:2)

是ServiceStack要求您为每个Web服务都有一个单独的类,但是如果您使用REST(即通过继承RestServiceBase),您可以在同一个Web服务中的同一个Resource(aka Request)DTO上实现多个HTTP Verb,例如:

public class CustomersService : RestServiceBase<Customers>
{
    OnGet(){...}
    OnPost(){...}
    OnDelete(){...}
    OnPut(){...}
}

这允许您为以下HTTP操作提供多个实现:

GET   /customers
GET   /customers/1
POST  /customers
PUT   /customers/1
DELETE /customers/1

虽然如果使用SOAP,则每个Web服务仅限于1个RPC方法,因为SOAP仅支持HTTP POST。

执行此操作的最佳方法是从 ServiceBase 继承并实现 Run()方法,无论使用哪个HTTP Verb或端点调用该方法都将被调用服务。

这意味着您需要将自己限制为每个Web服务一个METHOD,例如:你必须这样做:

public class GetCustomersService : ServiceBase<GetCustomers> {...}
public class PostCustomersService : ServiceBase<PostCustomers> {...}
public class DeleteCustomersService : ServiceBase<DeleteCustomers> {...}
public class PutCustomersService : ServiceBase<PutCustomers> {...}