5

我刚开始使用ServiceStack实现一个API示例,经历了很多示例,有的示例从服务返回HttpResult,有的返回ResponseDTO,首选哪一个?

4

1 回答 1

6

只返回响应 DTO 是首选,这基本上意味着您对默认行为感到满意,并且您的服务将按原样返回响应正文,序列化为请求的 Content-Type。

HttpResult 用于当您的服务需要在响应之外添加额外的 HTTP 自定义(例如额外的 HTTP 标头)时 - 但它不会更改 HTTP 响应正文的有线格式(除非您更改 Content-Type 这将更改响应序列化的内容)。

虽然 HttpResult 只是自定义 Response 的一种方式,但这里还有其他几种方式:

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 回答