2

次のようなServiceStackエンドポイントが必要です...

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

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

4

1 に答える 1

2

はい、同じWebサービスを指す複数のRESTフルパスを持つことができます。

パスをそのままにしておきたい場合は、HttpRequestを介してサービスを呼び出すために使用されるリクエストパスを調べることができます。

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

リクエストのタイプを判断する方法は、入力されたリクエストDTOを確認することですが、 /research//popular/を区別するには、別のリクエスト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の実装に関するヘルプが必要です

于 2011-12-07T18:59:57.310 に答える