2013-02-14 37 views
9

例如,如果我有標準的請求和響應DTO,通過IReturn<T>鏈接起來,具有如下的服務方法簽名的原因是什麼,如各種在線示例中所示(例如this one,儘管並非始終如一):爲什麼ServiceStack的新API會提升「對象」返回類型而不是更強類型的東西?

public object Get(DTO.MyRequest request) 

而非:

public IList<DTO.MyResponse> Get(DTO.MyRequest request) 

是一種object返回類型這裏只是簡單的支持等的輸出流的gzip壓縮,這導致在輸出端是一個字節數組服務功能?似乎人們會希望從這些所謂的「動作」調用中獲得適當的更強的返回類型,除非我錯過了一些常見的場景或用例。

回答

8

它曾經是一種限制,即新API僅支持object返回類型,但在New API wiki page的所有示例現在都使用強類型響應的情況下,情況並非如此。

之一,你可能要返回對象返回類型的原因是,如果你想裝飾一個HttpResult內響應,如:

public object Post(Movie movie) 
    { 
     var isNew = movie.Id == null; 
     Db.Save(movie); //Inserts or Updates 

     var movie = new MovieResponse { 
      Movie = Db.Id<Movie>(newMovieId), 
     }; 
     if (!isNew) return movie; 

     //Decorate the response if it was created 
     return new HttpResult(movie) { 
      StatusCode = HttpStatusCode.Created, 
      Headers = { 
       { HttpHeaders.Location, Request.AbsoluteUri.CombineWith(movieId) } 
      } 
     }; 
    } 

,如果你想返回不同的也非常有用根據請求的應答(儘管它不是我推薦),例如:

public object Get(FindMovies request) 
    { 
     if (request.Id != null) 
      return Db.Id<Movie>(movie.Id); 

     return Db.Select<Movie>(); 
    } 

如果你選擇返回object我強烈建議與裝飾你的請求DTO標記爲give a hint to ServiceStack該服務的預期響應應該是什麼。

+1

謝謝!在我引用的gzip壓縮的例子中(例如,通過「ToOptimizedResult 」),是否需要在那裏使用「object」返回類型?你沒有提到這是需要'object'的情景之一,我注意到'ToOptimizedResult '返回'object'而不是T. – 2013-02-15 16:49:48

+3

是的,它返回你的DTO用'CompressedResult'裝飾。這是您使用它的另一個很好的例子。 – mythz 2013-02-15 16:54:53

相關問題