5

私はRESTとServiceStackを学び始めたRouteばかりですが、理解できないことがあります。たとえば、GitHubチュートリアルから非常に基本的なHelloWorldの例を取り、それを書き直してUserオブジェクトのコレクションを返す場合です。次に例を示します。

public User
{
    public string Name;
    public string Address;
    public int Age;
}


// Hello - request object without [Route] attribute
public class Hello
{
   public string Name { get; set; }
}

public class HelloResponse
{
   public IEnumerable<User> Result {get;set;}
}


public class HelloService : Service
{
   public object Any(Hello request)
   {
       return new HelloResponse { // Collection of User object };
   }
} 

これですべてが正常に機能し、ここでは問題はありません。しかし今、私は次のような別のルーティングURLを追加したいと思います: /Hello/{name}/Address

User実際、このURLへのこの呼び出し(GET)は、パラメーターによって選択された単一のものを返しAgeます。どうすればこれを行うことができますか?別に追加する必要がありServiceますか?そして、URLが次のようになる場合:

/Hello/{name}/{age}/Address

なにかわからないようです……。

4

1 に答える 1

3

ServiceStack でのルーティングの詳細については、この以前の回答を参照してください。ServiceStack の新しい APIのスマート ルーティング セクションでは、その他のオプションと異なる優先順位について説明しています。

あなたの例にはいくつかの問題があります。最初の ServiceStack テキスト シリアライザーはパブリック プロパティのみをサポートするため、フィールドの代わりにパブリック プロパティを使用するようにユーザー モデルを変更する必要があります。

public User
{
    public string Name { get; set; }
    public string Address { get; set; }
    public int Age { get; set; }
}

次に、DTO のインターフェイスは、正当な理由がないため、悪い考えです。それらは引き続きサポートされますが、望ましくない結果になる可能性があります。List<T>より多くのユーティリティを提供するのような具体的なコレクションを使用します。

public class HelloResponse
{
    public List<User> Results { get; set; }
}

また、ルートDTO のプロパティ名と正確に一致する必要があります。リクエスト パスと照合する場合、大文字と小文字は区別されませんが、正確なプロパティ名にマップする必要があります。例:

/Hello/{Name}/{Age}/Address
于 2012-12-16T20:30:24.557 に答える