Heim  >  Artikel  >  Backend-Entwicklung  >  Schließen Sie die Rekonstruktion und Kapselung des zugrunde liegenden HttpClient von OSS.Http ab und unterstützen Sie die detaillierte Einführung der Standardbibliothek.

Schließen Sie die Rekonstruktion und Kapselung des zugrunde liegenden HttpClient von OSS.Http ab und unterstützen Sie die detaillierte Einführung der Standardbibliothek.

黄舟
黄舟Original
2017-03-06 10:57:511277Durchsuche

Die Unterstützung des OSS.Http-Projekts für die .Net Standard-Standardbibliothek wurde migriert, und die beiden Klassenbibliotheken der niedrigsten Ebene in der OSS-Open-Source-Reihe verfügen bereits über die Möglichkeit, laufzeitübergreifend zu unterstützen. Dieser Artikel enthält hauptsächlich 1. Einführung in HttpClient, 2. Rekonstruktionsideen und 3. Probleme, auf die leicht zu stoßen ist. Es hat einen sehr guten Referenzwert, werfen wir einen Blick mit dem Editor unten

Die Unterstützung des OSS.Http-Projekts für die .Net Standard-Standardbibliothek wurde migriert, und die beiden Klassenbibliotheken der untersten Ebene des OSS wurden migriert Open-Source-Serien sind bereits verfügbar. Die Möglichkeit zur laufzeitübergreifenden Unterstützung. Denn die OSS.Http-Klassenbibliothek ist ein leichtgewichtiges HTTP-Anfrage-Framework, das ich vor einigen Jahren basierend auf den Ideen von RestSharp fertiggestellt habe. Da die unterste Ebene HttpWebRequest schon seit langem verwendet, wird es dieses Mal im Grunde komplett überarbeitet. Dieser Artikel enthält hauptsächlich 1. Einführung in HttpClient, 2. Refactoring-Ideen und 3. Probleme, auf die man leicht stoßen kann.

1. Grundlegende Einführung in httpclient

HttpClient sollte eine neue Funktion sein, auf die in der .net-Framework-Version 4.5 verwiesen wird Ersteres ist einfacher und klarer und das Wichtigste ist, dass es die .net-Standard-API vollständig unterstützt. Dies ist auch ein wichtiger Grund, warum ich mich dafür entschieden habe.

HttpClient hat große strukturelle Anpassungen vorgenommen und ist eine vollständig asynchrone Implementierung. Man kann sagen, dass es die asynchrone Unterstützung von der untersten Ebene aus abgeschlossen hat:

1. HtttpRequestMessage

Grundlegende Informationen der Anfrage, Anfrageadresse, Anfrageaktion usw. Dieser Wert wird als Parameter in der Methode von HttpClient übergeben, die eine Anfrage initiiert , und entspricht dem Inhaltstext als Antwort auf die HttpResponseMessage

2 HttpContent

Anfrage, hauptsächlich einschließlich des spezifischen Inhalts der Anfrage, des Inhaltstyps, der Inhaltslänge usw. Es ist ein Attribut von HtttpRequestMessage. Beide enthalten das Headers-Attribut, aber der Umfang ist unterschiedlich. Dies ist ein Ort, an dem es leicht zu Verwirrung und Fehlern kommt einfache Klassifizierung:

Der Header von HttpRequestMessage (HttpRequestHeaders) ist hauptsächlich Es ist das Attribut der Anforderung, wie Accept, UserAgent, AcceptEncoding und andere grundlegende Attribute von http-Links.

Die Header von HttpContent (HttpContentHeaders) sind hauptsächlich Attribute des aktuellen Anforderungsinhalts, hauptsächlich einschließlich: Zulassen, Inhaltskodierung, Inhaltslänge, Inhaltstyp, Ablaufdatum, Zuletzt geändert usw. Weitere Informationen finden Sie unter Sehen Sie sich die offizielle Klassenbibliothek an.

Das HttpContent-System bietet mehrere Standardimplementierungen, hauptsächlich wie folgt:

3. HttpMessageHandler

Die Hauptfunktion dieser Klasse besteht darin, Aktionen zur Verarbeitung von Anforderungsinhalten usw. zu definieren, z. B. ob die Umleitung unterstützt wird, ob Cookies verwendet werden können, Proxy-Proxy usw. Dieser Wert ist auf Systemeinstellungen ausgerichtet Über den HttpClient-Konstruktor wird die vom System standardmäßig bereitgestellte Unterklasse HttpClientHandler hinzugefügt.

4. HttpClient

Spezifische Anforderungsimplementierung, vollständige Implementierung von POST, GET, Delete und anderen HTTP-Anforderungsmethoden, alle Methoden Der letzte Aufruf ist die SendAsync-Methode.

Die vier oben genannten Hauptklassen bilden die Hauptimplementierung von HttpClient-Anfragen. Wenn Sie sie nur einfach verwenden, müssen Sie sich nur um HttpClient kümmern, wie folgt:

Tatsächlich wurde darin die Zuweisung von HttpRequestMessage und HttpClientHandler standardmäßig implementiert.

Obwohl es kurz vorgestellt wird, ist grundsätzlich zu erkennen, dass die Implementierung von HttpClient eine sehr klare Arbeitsteilung aufweist. Es ist nicht mehr wie zuvor, dass alle Einstellungen in Webrequest konzentriert sind. Der direkteste Vorteil der klaren Arbeitsteilung besteht darin, dass HttpClient zum Teilen mehrerer Anfragen verwendet werden kann:

Der Standard-HttpClient ist die einfachste Möglichkeit, mit dem Senden von Anfragen zu beginnen kann verwendet werden, um so viele HTTP-Anfragen gleichzeitig zu senden, wie Sie möchten. In vielen Szenarien können Sie also einfach einen HttpClient erstellen und diesen dann für alle Ihre Anfragen verwenden.

Das heißt, wenn Sie in Ihrem Unternehmen verschiedene Anfragen initiieren möchten Im System können Sie einen HttpClient anstelle von HttpWebReqest freigeben. Grundsätzlich muss bei jeder Anforderung ein Objekt neu definiert werden, um den Ressourcenverbrauch zu reduzieren.

2. Refactor OSS.Http

Zurück zum Thema, Refactoring unseres aktuellen Codemoduls, es wird unter .Net Standard überhaupt nicht bereitgestellt. Die Unterstützung von httpWebRequest hat mich direkt zu der Entscheidung geführt, es erneut zu implementieren. Da httpWebRequest in der Vergangenheit grob war, musste ich im Grunde genommen ein großes Kapselungsframework erstellen Interessierte Studenten haben den Kern von RestSharp erkannt und können sich auf den alten Zweig unter dem Code OSS.Http beziehen.

Da ich vor dem Umbau nicht viel über HttpClient wusste, wollte ich den bestehenden Framework-Prozess fortführen und die Implementierung umstellen. Nach Durchsicht und Recherche der Kundendokumente stellte ich jedoch fest, dass viele Kapselungen völlig unnötig waren und sich auch der Prozess geändert hatte, sodass ich viele Dinge im ursprünglichen Framework löschte und die endgültige Implementierung neu arrangierte.

Natürlich ist die aktuelle Implementierung von HttpClient selbst einfach und klar genug, aber in vielen Fällen wird der direkte Aufruf von POST, GET und anderen Methoden die Wiederverwendung einiger Codes reduzieren Unten muss eine RestCommon-Methode implementiert werden. Um eine globale Anforderungssteuerung zu erreichen, muss der Aufrufer nur URL, HttpMothed und Parameter angeben.

Hier habe ich ein einfaches Flussdiagramm als Präsentation gezeichnet:

Es gibt im Grunde keinen großen Unterschied im Prozess der Datei lautet wie folgt:

Unter der Mos-Datei: Enum.cs-Aufzählungsklasse, FileParameter.cs-Dateiparameterklasse, FormParameter Form-Formularparameterklasse, OsHttpRequest-Anforderungsparameterklasse,

OsRest. cs ist derzeit die Hauptkapselungsklasse. Um sicherzustellen, dass HttpClient selbst über universelle Funktionen verfügt, erbt OsRest von HttpClient und stellt auch die RestSend-Methode bereit, in der der Prozess abgeschlossen und schließlich die SendAsync-Methode aufgerufen wird, um die Anforderung auszuführen.

Die Hilfsklasse RestUtil.cs vervollständigt die gemeinsame Nutzung des globalen OsRest (HttpClient) und definiert eine Standardimplementierung von HttpClientHandler. Sie können diese Klasse einfach direkt aufrufen.

Benutzerdefinierte Ausführungseinstellungen im Prozess können im RequestSet-Delegatenattribut in OSHttpRequest festgelegt werden. Der Zugriffstyp kann beispielsweise auf json festgelegt werden:

3. Probleme, auf die leicht zu stoßen ist

Obwohl nach der gesamten Rekonstruktion nicht viel Code vorhanden ist, sollte es dennoch einige Probleme geben, die mit allen geteilt werden können

1. Bei Problemen mit der Header-Zuweisung lesen Sie bitte meinen ersten Teil. Achten Sie darauf, verschiedene Header zu unterscheiden, da Ihnen sonst möglicherweise falsche Wertfehler gemeldet werden

2 . Sie können feststellen, dass es im obigen Flussdiagramm eine Beurteilung gibt, ob es sich um eine Get-Anfrage handelt, denn wenn es sich um eine Get-Anfrage handelt, kann dem Inhalt kein Wert zugewiesen werden, genau wie in HttpWebReqest, wenn die Wenn get request die GetRequestStream-Methode aufruft, wird für diesen Prädikattyp die Meldung „Eine Anfrage mit dem Fehler „Content-Body“ konnte nicht gesendet werden“ angezeigt. Wenn Sie OSS.Http als Anfrage verwenden, tritt dieses Problem natürlich nicht auf.

3. Die gleichzeitig mit der hochgeladenen Datei hochgeladenen Formularparameter unterscheiden sich von den separaten Formularparameterübermittlungen. Bitte achten Sie auf die Handhabung und nicht wissen, wie man auf die OsRest-Klasse verweist. Das ist alles, es wurde verarbeitet.

Das Obige ist eine detaillierte Einführung in die Rekonstruktion und Kapselung des zugrunde liegenden HttpClient von OSS.Http zur Unterstützung der Standardbibliothek. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn