2013-10-19 3 views
5

Ich habe gerade angefangen, ServiceStack zu verwenden, um eine API-Beispiele zu implementieren und ging durch eine Reihe von Beispielen, einige Beispiele geben HttpResult aus dem Dienst und andere zurück ResponseDTO, welche wird bevorzugt?Service Stack - Return HttpResult oder ResponseDTO

Antwort

6

Es wird empfohlen, nur das Antwort-DTO zurückzugeben, was im Grunde bedeutet, dass Sie mit dem Standardverhalten zufrieden sind und Ihr Dienst den Antworttext unverändert in den angeforderten Inhaltstyp zurückgibt. Das HttpResult ist für den Fall, dass Ihr Dienst zusätzliche HTTP-Anpassungen zusätzlich zur Antwort hinzufügen muss (z. B. zusätzliche HTTP-Header) - aber es ändert nicht das Kabelformat des HTTP-Antwortkörpers (es sei denn, Sie ändern den Inhalt -Type, der das ändert, auf was die Antwort serialisiert wird).

Obwohl die HttpResult nur ein Weg ist, um die Antwort anpassen, hier sind ein paar andere:

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

Siehe Customize HTTP Responses Wiki für weitere Informationen.

+0

Danke für die schnelle Antwort –