我刚开始使用ServiceStack实现一个API示例,经历了很多示例,有的示例从服务返回HttpResult,有的返回ResponseDTO,首选哪一个?
问问题
1825 次
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 回答