2014-01-30 6 views

Antwort

9

Sie dienen beide dem gleichen Zweck.

  • HttpWebRequest/HttpWebResponse sind seit der ersten Version von .NET zur Verfügung und ist nach wie vor ein absolut gültiger Ansatz.
  • HttpClientHttpClient (die HttpRequestMessage und HttpResponseMessage verwendet, um Anfragen und Antworten zu repräsentieren) wurde in .NET 4.5 eingeführt und bietet eine vollständig asynchrone API, zusammen mit einem neuen Modell für Anfrage und Antwort Inhalt; intern stützt es sich immer noch auf HttpWebRequest/HttpWebResponse.

Ein wichtiger Unterschied ist, dass HttpWebRequest/Response die Anforderung und Antwort von einer Client-Sicht nur repräsentieren, während HttpRequestMessage/HttpResponseMessage Verwendung von entweder einem Client sein kann, oder einen Server (ASP.NET-API verwendet diese Typen mit der kommunizieren Klient).

Sie können diejenige verwenden, mit der Sie am bequemsten sind; Beachten Sie jedoch, dass der Code, der ihn verwendet, asynchron sein muss, da HttpClient asynchron ist.

+0

Woher wissen Sie, dass HttpRequestMessage intern auf HttpWebRequest angewiesen ist? Ich sehe keine Vererbung oder gemeinsames Objekt in der Klassendefinition: https://msdn.microsoft.com/fr-fr/library/system.net.http.httprequestmessage%28v=vs.118%29.aspx – Elo

+1

@Elo, Sie müssen nicht von einer Klasse erben, um sich darauf zu verlassen ... Wie auch immer, ich sagte, dass HttpClient (nicht HttpRequestMessage) auf HttpWebRequest angewiesen ist. Das stimmt jedoch nicht genau. HttpClient verwendet einen HttpClientHandler, der selbst HttpWebRequest verwendet. Es wird nicht explizit in der Dokumentation erwähnt, aber Sie können es sehen, wenn Sie den Code betrachten. –

1

HttpResponseMessage stellen eine moderne Möglichkeit dar, Http zu verwenden. Es wird von REST-Lösungen wie der Web-API verwendet, um den Statuscode und den Location-Header zu manipulieren.

HttpWebResponse ist Goold alte Klasse, die alle Http Informationen enthält, aber als Obsolete gilt.

+2

Als veraltet angesehen? Von wem? Die Klasse wird nicht als veraltet markiert, und HttpClient verlässt sich trotzdem darauf ... –

+0

Hi Thomas, ich schätze das ist mein Schlechter. Scheint, dass die Konstruktoren Veraltet http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse(v=vs.110).aspx sind –

Verwandte Themen