为什么ServiceStack的新API会提升“对象”返回类型而不是更强类型的东西?

时间:2013-02-14 18:49:03

标签: servicestack

例如,如果我有标准请求和响应DTO,通过IReturn<T>链接,有什么原因可以获得如下所示的服务方法签名,如各种在线示例所示(例如{{3虽然在整个过程中并不始终如一):

public object Get(DTO.MyRequest request)

而不是:

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

这里的object返回类型是否只是为了支持输出流的gzip压缩等服务功能,导致输出为字节数组?似乎人们希望从这些所谓的“动作”调用中获得适当的更强的返回类型,除非我缺少一些常见的场景或用例。

1 个答案:

答案 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该服务的预期响应应该是什么。