2016-08-03 30 views
3

私はServiceStackの初心者です。 wikiから、Serviceクラスには、DTOオブジェクトを取得するAny、Get..etc HTTP Verb関数があります。 DTO routingは、ルーティングに制限するためにHTTP動詞を持つことができます。これらのサービスとDTOルーティングはどのように連携していますか?ServiceStackサービスとDTOルーティングのHTTP動詞

たとえば、サービスに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

カスタムルーティングとサービスの実装アクセスは切り離されています。ルーティングでは、カスタムルートを使用してサービスを呼び出すことができますが、サービスの実装ではサービスのリクエストが処理できるものを定義します。

注:お客様のサービスは、カスタムルート以外にも呼び出すことができます。

PUT /hello/foo 

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

のみ/helloで始まるPUT要求、例えば一致する:Pre-defined Routes、またはMessagingService Gatewayを、使用している場合など

は、だからあなたのルートのdefintionsカスタムルート、それはどこ、できますかを定義します

しかし、誰かがPUT /hello/fooをリクエストした場合、メソッド実装を見つけることができないため、ServiceStackは実装されていない例外をスローします

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

それともANY HTTP動詞にリクエストを処理することができますAny()フォールバック:あなたは複数持っている場合を除き

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

PUT要求のいずれかにする必要があり、その要求を処理することができntation同じRequest DTOの実装については、Any()でサービスを実装することを強くおすすめします。たとえば、

カスタムルートではどのルートが許可されているかを制限することができ、リクエストと一致する場合はAny()実装に最適な実装またはフォールバックを呼び出します。

関連する問題