2011-12-07 28 views
2

我想有ServiceStack终点如下面...单独或组合的ServiceStack服务?

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

由于两个将返回List<Item>,我很乐意能有这两个在同一RestServiceBase更容易代码管理。这可能吗?如果是这样,当我们如何区分这个请求来找到它是一个“最近”还是“受欢迎”的请求,以便我能够适当地处理它?

回答

2

是的,你可以有多个REST-ful路径指向同一个Web服务。

如果你想离开的路径为,是可以通过的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的问题: Need help on servicestack implementation

+0

可爱!我知道你会有一个很好的答案。那么我的这项服务正疯狂地来!基于RedisStackOverflow示例,因为它非常相似。爱护ServiceStack! – robertmiles3

+1

@ robertmiles3真棒,很高兴听到它:) IMO Redis支持的ServiceStack应用程序必将产生出色的用户体验 - 当您完成后,不要忘记将您的应用程序链接发布到Google Group! – mythz