2016-08-03 46 views
3

我是ServiceStack的新手。從wiki中,Service類具有Any,Get..etc HTTP Verb函數來獲取DTO對象。 DTO routing可以將HTTP動詞限制爲路由。這些Service和DTO路由如何協同工作或者做這兩個HTTP Verb限制多大?HTTP Service在ServiceStack服務和DTO路由

例如,如果服務只有Get函數,但DTO具有Put限制,是否表示沒有路由匹配?

public class HelloService : Service 
{ 
    public object Get(Hello request) 
    { 
     return new HelloResponse { Result = "Hello, " + request.Name }; 
    } 
} 

[Route("/hello/{Name}", "PUT")] 
public class Hello 
{ 
    public string Name { get; set; } 
} 

我在哪裏可以找到關於這些的更多信息?

謝謝,

回答

1

您的自定義路由和服務實現訪問權限已解耦。路由定義了什麼樣的自定義路由可以用來調用您的服務,同時您的服務實現定義了您的服務可以處理的請求。

注意:您的服務不限於並且可以在您的自定義路線之外被呼叫,例如,使用Pre-defined Routes,或MessagingService Gateway,當等

所以,你的路線defintions定義什麼自定義路由允許,其中:

PUT /hello/foo 

[Route("/hello/{Name}", "PUT")] 

一個PUT請求開始/hello,例如僅匹配

但是,如果有人提出PUT /hello/foo請求ServiceStack將拋出一個未實現的異常,因爲它不會能夠找到一個方法的工具ntation可以處理這對於一個PUT請求需要該請求之一:

public object Put(Hello request) { ... } 

還是Any()回退可處理上任何 HTTP動詞的請求:

public object Any(Hello request) { ... } 

除非你有多個實施相同的請求DTO,我建議堅持實施您的服務與Any(),例如:

public object Any(Hello request) { ... } 

通過這種方式,您的自定義路由可以限制允許的路由以及請求匹配時它將調用最匹配的實現或回退到Any()實現。