質問

次のようなサービス担当エンドポイントが欲しい...

[RestService("/items/recent")]
[RestService("/items/recent/{Page}")]
[RestService("/items/popular")]
[RestService("/items/popular/{Page}")]

両方が返されるので List<Item>, 、私はこれらの両方を同じものにすることができるのが大好きです RestServiceBase コード管理を容易にするため。これは可能ですか?もしそうなら、それが適切に処理できるように、それが「最近」または「人気のある」リクエストであるかどうかを見つけるためにリクエストを差別化するにはどうすればよいですか?

役に立ちましたか?

解決

はい、同じWebサービスを指す複数のREST-FULパスを使用できます。

パスをそのまま残したい場合は、HTTPRequestを介してサービスを呼び出すために使用される要求パスを検査できます。

var httpReq = base.RequestContext.Get<IHttpRequest>();
httpReq.PathInfo //or httpReq.RawUrl, httpReq.AbsoluteUri, etc.

あなたがそれがどのようなタイプのリクエストであるかを計算する方法は、人口の多いリクエストDTOを見ることです - しかし、 /最近//人気/ 別のリクエストDTOプロパティに保存してから、その値を検査する必要があります。

[RestService("/items/{Type}")]
[RestService("/items/{Type}/{Page}")]
public class Items
{
    public string Type { get; set; }
    public int? Page { get; set; }
}

public class ItemsService : ServiceBase<Items>
{
    public override object Run(Items request)
    {
        if (request.Type == "recent")
           if (!request.Page.HasValue) 
              //path 1
           else
              //path 2
        else if (request.Type == "popular")
           if (!request.Page.HasValue) 
              //path 3
           else
              //path 4
    }
}

これは、このstackoverflowの質問にも似ています。ServiceStackの実装に関するサポートが必要です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top