dlevs Antwort funktionierte, aber ich hatte Probleme beim Implementieren der Lösung ("Der Parameter '{0}' darf kein leerer String sein."), Also habe ich beschlossen, den kompletten Code zu schreiben, falls jemand ähnliche Probleme hat .
Mein Ziel war es, den HTML-Code als Zeichenfolge zu erhalten, aber ich musste die Cookies zur Webanforderung hinzufügen. Dies ist die Funktion, die die Zeichenfolge mit den Cookies Downloads:
public static string DownloadString(string url, Encoding encoding, IDictionary<string, string> cookieNameValues)
{
using (var webClient = new WebClient())
{
var uri = new Uri(url);
var webRequest = WebRequest.Create(uri);
foreach(var nameValue in cookieNameValues)
{
webRequest.TryAddCookie(new Cookie(nameValue.Key, nameValue.Value, "/", uri.Host));
}
var response = webRequest.GetResponse();
var receiveStream = response.GetResponseStream();
var readStream = new StreamReader(receiveStream, encoding);
var htmlCode = readStream.ReadToEnd();
return htmlCode;
}
}
Wir sind den Code aus dlev Antwort mit:
public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
HttpWebRequest httpRequest = webRequest as HttpWebRequest;
if (httpRequest == null)
{
return false;
}
if (httpRequest.CookieContainer == null)
{
httpRequest.CookieContainer = new CookieContainer();
}
httpRequest.CookieContainer.Add(cookie);
return true;
}
Dies ist, wie Sie den vollständigen Code verwenden:
var cookieNameValues = new Dictionary<string, string>();
cookieNameValues.Add("varName", "varValue");
var htmlResult = DownloadString(url, Encoding.UTF8, cookieNameValues);
Das wäre schwierig, da Cookies ein HTTP-Konzept sind. Gibt es einen Grund, warum du diese Änderung vornehmen musst? – dlev
@dlev - WebRequest erstellt eine HttpWebRequest basierend auf der URI. Wenn ich also mein eigenes WebRequest-Objekt mockern und/oder mein eigenes URI registrieren möchte, das auch eine WebRequest zurückgibt, möchte ich die Methode nicht darauf beschränken, nur mit einem HttpWebRequest-Objekt zu arbeiten. –
Ich verstehe, dass der Laufzeittyp von 'webRequest'' HttpWebRequest' ist. Aber der Zugriff auf 'CookieContainer' erfordert, dass der Kompilierzeittyp' HttpWebRequest' ist. Sie erwähnen auch, dass Sie sich nicht auf HTTP beschränken, aber in diesem Fall bedeuten Cookies nicht viel, da sie ein HTTP-Konstrukt sind (was der Grund für ihre Abwesenheit auf "WebRequest" ist.) – dlev