例如,如果我有标准的请求和响应DTO,通过链接IReturn<T>,具有如下所示的服务方法签名的原因是什么,如各种在线示例中所示(例如这一个,尽管并非始终如一):
public object Get(DTO.MyRequest request)
Run Code Online (Sandbox Code Playgroud)
而不是:
public IList<DTO.MyResponse> Get(DTO.MyRequest request)
Run Code Online (Sandbox Code Playgroud)
object这里的返回类型只是为了支持输出流的gzip压缩等服务功能,这会导致输出为字节数组吗?似乎人们希望从这些所谓的"动作"调用中获得适当的更强的返回类型,除非我遗漏了一些常见的场景或用例.
它曾经是新API仅支持object返回类型的限制,但在新API维基页面上的所有示例现在都使用强类型响应时,情况并非如此.
您可能想要返回对象返回类型的原因之一是您是否要在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) }
}
};
}
Run Code Online (Sandbox Code Playgroud)
如果你想根据请求返回不同的响应(虽然这不是我推荐的),它也很有用,例如:
public object Get(FindMovies request)
{
if (request.Id != null)
return Db.Id<Movie>(movie.Id);
return Db.Select<Movie>();
}
Run Code Online (Sandbox Code Playgroud)
如果您确实选择退回,object我强烈建议您使用IReturn<T>标记装饰您的Request DTO,以便向ServiceStack提供服务的预期响应.
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |