例如,如果我有标准请求和响应DTO,通过IReturn<T>
链接,有什么原因可以获得如下所示的服务方法签名,如各种在线示例所示(例如{{3虽然在整个过程中并不始终如一):
public object Get(DTO.MyRequest request)
而不是:
public IList<DTO.MyResponse> Get(DTO.MyRequest request)
这里的object
返回类型是否只是为了支持输出流的gzip压缩等服务功能,导致输出为字节数组?似乎人们希望从这些所谓的“动作”调用中获得适当的更强的返回类型,除非我缺少一些常见的场景或用例。
答案 0 :(得分: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
我强烈建议您使用IReturn<T>
标记将您的请求DTO装饰到give a hint to ServiceStack该服务的预期响应应该是什么。