2011-12-07 59 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