webentwicklung-frage-antwort-db.com.de

C # HttpWebRequest vs WebRequest

Ich habe diesen Code gesehen:

var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");

Warum musst du (HttpWebRequest)? Warum nicht einfach HttpWebRequest.Create? Und warum macht HttpWebRequest.Create mache ein WebRequest, kein HttpWebRequest?

108
Unknown

Die Methode Create ist statisch und existiert nur für WebRequest. Das Aufrufen als HttpWebRequest.Create Sieht zwar anders aus, ist aber tatsächlich so kompiliert, dass WebRequest.Create Aufgerufen wird. Es scheint sich nur aufgrund der Vererbung auf HttpWebRequest zu befinden.

Die Methode Create verwendet intern das Factory-Muster, um die eigentliche Erstellung von Objekten auf der Grundlage des Uri durchzuführen, das Sie an sie übergeben haben. Sie könnten tatsächlich andere Objekte wie ein FtpWebRequest oder FileWebRequest zurückerhalten, abhängig vom Uri.

131
David Wengier

WebRequest ist eine abstrakte Klasse mit einer Factory-Methode Create, die abhängig von der übergebenen URL eine Instanz einer konkreten Unterklasse erstellt. Ob Sie HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl); anstelle von WebRequest req = WebRequest.Create(strUrl); benötigen oder möchten, hängt von Ihren Anforderungen ab und davon, welche Art von URLs Sie übergeben.

Wenn Sie nur HTTP: URLs übergeben, können Sie mit dem vorherigen Code auf die Eigenschaften und Methoden zugreifen, die die Unterklasse HttpWebRequest zusätzlich zu den in der Basisklasse WebRequest definierten implementiert. Wenn Sie jedoch eine FTP: URL übergeben, schlägt der Versuch fehl, nach HttpWebRequest umzuwandeln.

Letzteres ist generisch und schlägt bei keinem der unterstützten URL-Typen fehl. Ohne Umwandlung in eine Unterklasse können Sie jedoch nur auf die von der Basisklasse definierten Eigenschaften und Methoden zugreifen.

- über Martin Honnen

30
Orhan Cinar

Die Besetzung ist nur erforderlich, wenn Sie Zugriff auf Mitglieder benötigen, die für HttpWebRequest eindeutig sind. Wenn die von WebRequest unterstützten Eigenschaften/Methoden ausreichen, können Sie eine Anwendung schreiben, die für viele Arten von Anforderungs-/Antwortprotokollen geeignet ist. In diesem Fall kann der URI vom Benutzer mit einem beliebigen Protokoll angegeben werden, das von steckbaren Protokollen unterstützt wird. Neue Protokolle können sogar ohne Änderung der ursprünglichen Software unterstützt werden.

Wenn Ihre Anwendung mehr Kontrolle über protokollspezifische Funktionen benötigt, können Sie requestUri auf Ihre unterstützten Schemata beschränken und WebRequest in die entsprechende protokollspezifische Unterklasse umwandeln. Dies schränkt die von Ihrer Anwendung unterstützten Protokolle ein, ermöglicht es Ihnen jedoch, protokollspezifische Funktionen anzupassen.

11
Kevin