ServiceStack - наследование всего ресурса DTO в Single Restservice - PullRequest
1 голос
/ 18 июля 2011

Как унаследовать все ресурсы 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 в этой службе ????????2. Мне нужно создать отдельный класс для этого ?????

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

Пожалуйста, предложите мне этот вопрос .......

1 Ответ

2 голосов
/ 25 июля 2011

Да. ServiceStack требует, чтобы у вас был отдельный класс для каждой веб-службы, хотя, если вы используете REST (т. Е. Наследуете от RestServiceBase), вы можете реализовать несколько HTTP-глаголов в одном и том же ресурсе (иначе говоря, Request) в одной и той же веб-службе, например:

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

Это позволяет вам предоставить несколько реализаций для следующих действий HTTP:

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

Хотя, если вы используете SOAP, вы ограничены одним методом RPC для каждого веб-сервиса, поскольку SOAP поддерживает только HTTP POST.

Лучший способ сделать это - наследовать от ServiceBase и реализовать метод Run () , который будет вызываться независимо от того, какой HTTP-глагол или конечная точка использовались для вызова службы ,

Это означает, что вам нужно ограничить себя одним МЕТОДОМ для каждой веб-службы, например, Вы должны сделать это:

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