2017-12-06 5 views
-1

Ich habe ein Test-HTML-Formular mit dem hier gezeigten Code erstellt. Wenn ich einen Wert in das Textfeld Schlüssel eintrage, wähle den ersten der beiden Typen und klicke auf die Schaltfläche Weiter. Das Browserfenster wird zu einer XML-Version eines Webs navigieren Seite. Wenn ich in der Formularaktionszeile XML durch JSON ersetze, würde dieselbe Webseite in einem JSON-Format dargestellt. Ersetzen Sie es durch SUBMIT und die resultierende Webseite wäre nur eine normale Webseite.Verwenden von WebClient Wie kann ich den Datenparameter für die Veröffentlichung in einem URI codieren?

<!DOCTYPE html> 
<html lang="en-us"> 
<head> 
    <meta charset="utf-8" /> 
</head> 
<body> 
    <form action="https://www.someaddress.com/xxxxxxxxxx/999999999/XML" method="post"> 
     <table role="presentation"> 
      <tr> 
       <th><label for="key">Key</label></th> 
       <td><input type="text" id="key" name="key" size="10" autofocus> </td> 
      </tr> 
      <tr> 
       <th>Type</th> 
       <td> 
        <label><input type="radio" name="type" id="type1" value="type1"> Type 1</label> 
        <label><input type="radio" name="type" id="type2" value="type2"> Type 2</label> 
       </td> 
      </tr> 
      <tr> 
       <td></td> 
       <td><button type="submit" class="btn btn--primary">Continue</button></td> 
      </tr> 
     </table> 
    </form> 
</body> 
</html> 

enter image description here

Das Problem Ich bin mit dem Versuch, das ich mache die Wirkung des Web-Formulars oben in ein Verfahren zur Herstellung einer Konsolenanwendung unten zu konvertieren. Wenn Sie den WebClient verwenden (so interagiert diese Anwendung mit dem Web an mehreren anderen Stellen), Wie sollte der Wert der String-Variablen "data" geschrieben werden, damit er an die Ziel-IP-Adresse gesendet wird, die an die Methode übergeben wird eine Zeichenfolge zurückgeben, die die XML-Daten enthält, die die Webseite sind? Ich habe die folgende Zeile ausprobiert (die von einer Webseite stammt, die ich gefunden habe, als ich im Internet nach einer Antwort auf diese Frage suchte) und auch mit den Werten von MyKeyVal und type1 umgeben von doppelten Doppelzitaten, aber keiner funktioniert für mich. Ich bekomme Fehler, die "Meta-Start-Tag auf Zeile 14 Position 6 stimmt nicht mit dem End-Tag der Head-Line 22 Position 3", aber da die "Daten" Variable keine Tags habe ich bin nicht sicher, was geändert werden sollte, um zu lösen so ein Fehler.

static string Submit(string ip, string id) 
{ 
    string response; 
    using (var client = new WebClient()) 
    { 
     Uri uri = new System.Uri("https://" + ip + "/xxxxxxxxxx/" + id + "/XML"); 
     string data = "key = MyKeyVal type = type1"; 
     response = client.UploadString(uri, data); 
    } 
    //additional parsing of the response goes here 
    return response; 
} 

Antwort

0

Ein Kollege von mir folgenden vorgeschlagen, die, obwohl sie nicht die Verwendung von WebClient nicht beschäftigen, tut es das Problem beheben ich mit wurde:

static string Submit(string ip, string id) 
    { 
    string response; 
    var client = (HttpWebRequest)WebRequest.Create("https://" + ip + "/xxxxxxxxxx/" + rt + "/XML"); 
    client.ContentType = "application/x-www-form-urlencoded"; 
    client.Method = "POST"; 
    var requestStream = client.GetRequestStreamAsync().Result; 
    var data = Encoding.UTF8.GetBytes("key=MyKeyVal&type=type1"); 
    requestStream.Write(data, 0, data.Length); 
    var result = client.GetResponseAsync().Result; 
    using (var reader = new StreamReader(result.GetResponseStream())) 
    { 
     response = reader.ReadToEnd(); 
    } 
    //additional parsing of the response goes here 
    return response; 
} 
Verwandte Themen