2013-01-31 3 views
10

Ich habe eine sehr einfache Notwendigkeit - mein C# -Code muss eine Verbindung zu einem Remote-Server über HTTP herstellen und eine Zeichenfolge herunterladen. Eine triviale GET-Anfrage, mehr nicht.Wie lade ich eine Zeichenkette über HTTP von .NET 4.5 herunter?

Um sicherzustellen, dass meine Bewerbung Ich möchte auch ein Timeout verhängen (etwa 3 Sekunden) auf dem Betrieb als Reaktion bleibt.

Mein erster Gedanke war System.Net.WebClient zu verwenden, aber das unterstützt keine Timeouts.

Dann wollte ich die gute alte System.Net.HttpWebRequest versuchen, aber leider - seit .NET 4.5 ist es been marked as obsolete!

Also, was kann ich verwenden? Ich überprüfte den System.Net.Http Namespace, aber es erlaubt nur asynchrone Nutzung, Kräfte Task s zu verwenden, und in der Regel fügt nur ein Dutzend verschiedene Abstraktionsebenen, ohne wirklich eine neue Funktionalität hinzugefügt (da es verwendet die gleiche alte System.Net.HttpWebRequest unter sowieso)

Ich möchte keine asynchronen Sachen, ich möchte keine anderen Threads einbeziehen, ich möchte nicht das Tasks-Framework einbeziehen, ich will nicht Tonnen von Wrappern.

Was ist der richtige Weg, dies .NET 4.5 in tun?

+7

Es ist nicht der 'HttpWebRequest', der veraltet ist, es ist seine Konstruktoren. 'Verwenden Sie nicht den HttpWebRequest-Konstruktor. Verwenden Sie die WebRequest.Create Methode zur Initialisierung neue HttpWebRequest objects.' – GSerg

+2

Sie noch WebClient Asynchron-Methoden verwenden, könnte ein Timeout zu setzen: http://stackoverflow.com/a/601899/54937 –

+0

Und Sie können immer verschieben Anrufe 'WebClient' zu einem Hintergrundthread und verwende einen Semaphor irgendeiner Art (wie ein 'AutoResetEvent'), der ein Timeout hat. – Will

Antwort

14

HttpWebRequest Klasse ist nicht veraltet, nur seine Konstrukteure sind.

Um die documentation zu zitieren:

nicht HttpWebRequest Konstruktor anwenden. Verwenden Sie die Methode WebRequest.Create, um neue HttpWebRequest Objekte zu initialisieren. Wenn die Regelung für die Uniform Resource Identifier (URI) http:// oder https:// ist, gibt ein CreateHttpWebRequest Objekt.

+1

Das habe ich verpasst. :) –

2

Nur der Konstruktor ist veraltet, nicht die HttpWebRequest-Klasse selbst. Verwenden Sie WebRequest.Create, um eine Instanz von HttpWebRequest zu erstellen.