服务堆栈 - 返回HttpResult或ResponseDTO

时间:2013-10-19 10:55:16

标签: servicestack

我刚刚开始使用ServiceStack来实现API示例并经历了很多示例,一些示例从服务返回HttpResult而其他示例返回ResponseDTO,哪一个更受欢迎?

1 个答案:

答案 0 :(得分:6)

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

HttpResult适用于您的服务除了响应之外还需要添加其他HTTP自定义(例如其他HTTP标头) - 但它不会更改HTTP响应主体的有线格式(除非您更改内容 - 键入哪个将更改响应序列化的内容)。

虽然HttpResult只是一种自定义响应的方法,但以下是其他一些方法:

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);
    }
}

有关详细信息,请参阅Customize HTTP Responses wiki。