5

ServiceStack を使用して API サンプルを実装し始めたばかりで、多くの例を調べました。サービスから HttpResult を返す例もあれば、ResponseDTO を返す例もあります。どちらが優先されますか?

4

1 に答える 1

6

応答 DTO のみを返すことをお勧めします。これは基本的に、デフォルトの動作に満足していることを意味し、サービスは要求されたコンテンツ タイプにシリアル化された応答本文をそのまま返します。

HttpResult は、サービスが応答に加えて追加の HTTP カスタマイズを追加する必要がある場合 (追加の HTTP ヘッダーなど) に使用されますが、HTTP 応答本文のワイヤ形式は変更されません (Content-Type を変更しない限り)。応答のシリアライズ先を変更します)。

HttpResult は Response をカスタマイズする 1 つの方法にすぎませんが、他にもいくつかあります。

public class HelloService : Service
{ 
    public object Get(Hello request) 
    { 
        //1. Returning a custom Response Status and Description with Response DTO body:
        var responseDto = ...;
        return new HttpResult(responseDto, HttpStatusCode.Conflict) {
            StatusDescription = "Computer says no",
        };

        //2. Throw or return a HttpError:
        throw new HttpError(System.Net.HttpStatusCode.Conflict, "SomeErrorCode");

        //3. Modify the Request's IHttpResponse
        base.Response.StatusCode = (int)HttpStatusCode.Redirect;
        base.Response.AddHeader("Location", "http://path/to/new/uri");
    }

    //4. Using a Request or Response Filter 
    [AddHeader(ContentType = "text/plain")]
    public string Get(Hello request)
    {
        return "Hello, {0}!".Fmt(request.Name);
    }
}

詳細については、HTTP 応答のカスタマイズwiki を参照してください。

于 2013-10-19T16:12:15.217 に答える