9

たとえば、 を介してリンクされた標準のリクエストとレスポンスの DTO がIReturn<T>ある場合、さまざまなオンラインの例に見られるように、次のようなサービス メソッド シグネチャを使用する理由は何ですか (一貫性はありませんが、このなど)。

public object Get(DTO.MyRequest request)

それよりも:

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

ここでの戻り値の型はobject、出力ストリームの gzip 圧縮などのサービス機能をサポートするためのものであり、その結果、出力はバイト配列になりますか? 一般的なシナリオやユースケースが欠けていない限り、これらのいわゆる「アクション」呼び出しから適切な強力な戻り値の型が必要になるようです。

4

1 に答える 1

8

以前は、新しい API が戻り値の型しかサポートしていなかったという制限がありましたが、新しい API wiki ページobjectのすべての例が厳密に型指定された応答を使用するようになったため、しばらくの間はそうではありませんでした。

オブジェクトの戻り値の型を返したい理由の 1 つは、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>();
    }

を返すことを選択した場合は、要求 DTO をマーカーobjectで装飾して、サービスの期待される応答がどうあるべきかServiceStack にヒントを与えることを強くお勧めします。IReturn<T>

于 2013-02-14T20:49:15.680 に答える