2013-05-31 4 views
17

Ich frage mich schon seit einer Weile, ist es besser, immer wieder HttpResponseMessage Web mit asp.net MVC Web API?Ist es besser, HttpResponseMessage in Web API immer zurückzugeben?

Wenn ich das Standard-WebAPI Projekt lade ich sehe sie es nicht Controller in der Probe I

// GET api/values 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

     // GET api/values/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

verwenden dachte, die HttpResponseMessage alles um wickelt und macht es eine gute Http Anfrage. Wenn das richtig ist, was nützt es, es nicht nur zu benutzen?

+1

injizieren Es ist mehr Arbeit. – SLaks

+0

Wegen der zusätzlichen Zeile Request.CreateResponse (HttpStatusCode.OK, "Wert"); ??? – chobo2

+4

Genau. Wenn Sie die HTTP-Antwort nicht anpassen müssen, ist es besser, einfacheren Code wie das Beispiel in Ihrer Frage zu verwenden. – SLaks

Antwort

17

Ich gebe immer HttpResponseMessage zurück. Der Sinn der Web-API liegt darin, eine HTTP-API verfügbar zu machen. Wenn Sie so vorgehen, dass Sie ein Objekt zurückgeben und sich dann auf die Framework-Pipeline verlassen, um das Objekt in eine HTTPResponseMessage zu konvertieren, verdecken Sie nur den IMO der Absicht.

Ich bin zuversichtlich, dass wenn Sie die zusätzlichen Kosten für die Erstellung der HttpResponseMessage selbst bezahlen, werden Sie besser verstehen, wie Web API tatsächlich funktioniert. Sie werden weniger Probleme haben, weil Sie eher vermeiden, dass die Web-API etwas tut, was Sie nicht erwartet haben. Sie werden wahrscheinlich die Vorteile von HTTP-Funktionen nutzen, da die Header für Sie da sind.

+0

Ich gebe immer nur HttpResponseMessage zurück, aber ich fragte mich, warum andere Leute vielleicht nicht so wählen, wie ich mich erinnere, wenn es eine gültige HTTP-Anfrage mit allen Headern und Zeug macht. – chobo2

+0

@ chobo2 Aber es gibt keine Möglichkeit, die HTTP-Header direkt zu beeinflussen. Sie müssen einen ActionFilter für jedes Szenario erstellen, in dem Sie die Kopfzeilen berühren möchten. –

+1

Ich würde das auch empfehlen. Wir haben vor ungefähr 8 Monaten mit einem Framework begonnen und vor ein paar Monaten realisiert, wie viel besser es mit HttpResponseMessage war. Beispielsweise können Sie (neben anderen guten Gründen) "ReasonPhrase" für Ihre Antwort angeben, sodass Sie präziser sein können, wenn Sie "BadRequest" zurückgeben. –

3

Zur Trennung von Bedenken, warum nicht eine Service-Schicht (stark typisierte Methoden in einer Klassenbibliothek) und eine Webservice-Schicht (ASP.NET WEB API).
Die Service-Schicht kann problemlos von Winform, WPF, Console und Test-Projekten ohne HTTP-Abhängigkeit konsumiert werden und auch als Webservice von ASPNET WebAPi zum Beispiel für mobile Anwendungen und/oder Javascript verfügbar gemacht werden.
Der Webservice-Layer betrifft die Serviceschicht mit http-Problemen (Header, Inhaltstyp, http-Status ..), sodass Sie HttpResponseMessage zurückgeben können.
Dies macht auch Controller wirklich dünn und Sie können den Dienst mit DI

Verwandte Themen