9

例如,如果我有标准的请求和响应 DTO,通过 链接IReturn<T>,那么有如下服务方法签名的原因是什么,如各种在线示例中所见(例如这个,尽管始终不一致):

public object Get(DTO.MyRequest request)

而不是:

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

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

4

1 回答 1

8

过去,New API 仅支持object返回类型是一个限制,但一段时间以来,New API wiki 页面上的所有示例现在都使用强类型响应。

您可能希望返回对象返回类型的原因之一是,如果您想在 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,以向 ServiceStack 提示服务的预期响应应该是什么。IReturn<T>

于 2013-02-14T20:49:15.680 回答