REST-Webservice: Body ok, String ok, wie File empfangen ?

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Pe..CH.

    REST-Webservice: Body ok, String ok, wie File empfangen ?

    Ich möchte aus einer Cloud eine Datei (PDF) abrufen per REST-Webservice Request. Methode: POST / Content-Type: application/json

    Mit folgendem Code bekomme ich ein OK als Ergebnis,

    VB.NET-Quellcode

    1. Dim a As New AppBehaviour With {
    2. .DEALER_ALWAYS_SAVE_DHP_XML_PDF_EXPORT_BIT = 4,
    3. .XML_EXPORT_XML_FORMAT = "UTF8",
    4. .DONOT_CREATE_NEW_CLOUDID = 1
    5. }
    6. Dim c As New Root With {
    7. .customerNo = "xxx",
    8. .pass = "xxx",
    9. .cloudId = "123abc",
    10. .returnAsFile = True,
    11. .wawiManufacturer = "",
    12. .appBehaviour = a
    13. }
    14. Dim RestURL As String = "https://cloud0815.com/irgendwas"
    15. Dim client As New Net.Http.HttpClient
    16. Dim JsonData As String = JsonConvert.SerializeObject(c)
    17. Dim RestContent As New Net.Http.StringContent(JsonData, Encoding.UTF8, "application/json")
    18. Dim RestResponse As Net.Http.HttpResponseMessage = Await client.PostAsync(RestURL, RestContent)
    19. ResultMessage.Text = RestResponse.StatusCode.ToString


    jetzt muss ich die Daten abrufen und das PDF speichern. Ich habe im Internet sehr viel gesucht, einiges gefunden, aber weitergeholfen hat es mir nicht. Hier im Forum gibt es einige es zwar sehr viel zum Stichwort JSON, aber ich bin überfordert damit. Ich wünsche mir einen Schubs in die richtige Richtung, evtl. eine Quelle, Tutorial oder Code Schnipsel.

    Ich habe einen C Code bekommen, der passen könnte, Ich tu mich schwer mit der Übersetzung nach VB, der Telerik Converter versagt hier.

    C-Quellcode

    1. WebRequest request = WebRequest.Create("https://cloud0815.com/irgendwas");
    2. request.ContentType = "application/json";
    3. request.Method = "POST";
    4. using (var streamWriter = new StreamWriter(request.GetRequestStream()))
    5. {
    6. streamWriter.Write(json.ToString());
    7. streamWriter.Flush();
    8. streamWriter.Close();
    9. }
    10. try
    11. {
    12. WebResponse response = request.GetResponse();
    13. using (Stream output = File.OpenWrite(Filename))
    14. using (Stream input = response.GetResponseStream())
    15. {
    16. input.CopyTo(output);
    17. }
    18. OutputMessage("Successfully created file");
    19. }
    20. catch(Exception ex)
    21. {
    22. OutputMessage("Exeption while download, Ex: " + ex.Message);
    23. }
    24. }


    Wäre das die richtige Richtung ?
    Mir ist nicht ganz klar was dein Problem ist, aber ich werfe mal folgendes in den Raum.

    Um den Rückgabewert als Byte Array zubekommen:

    Quellcode

    1. await RestResponse.Content.ReadAsByteArrayAsync()

    Um den Rückgabewert als Stream zu bekommen:

    Quellcode

    1. await RestResponse.Content.ReadAsStreamAsync()
    Mit folgendem Code empfange ich ein PDF, jedoch nur Seite 2 von 2.

    VB.NET-Quellcode

    1. Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim a As New AppBehaviour With {
    3. .DEALER_ALWAYS_SAVE_DHP_XML_PDF_EXPORT_BIT = 4,
    4. .XML_EXPORT_XML_FORMAT = "UTF8",
    5. .DONOT_CREATE_NEW_CLOUDID = 1,
    6. .XML_EXPORT_INCLUDING_MANU_CUSTNR = 1
    7. }
    8. Dim c As New Root With {
    9. .customerNo = "12345",
    10. .pass = "67890",
    11. .cloudId = "abcdef",
    12. .returnAsFile = True,
    13. .wawiManufacturer = "",
    14. .appBehaviour = a
    15. }
    16. Dim RestURL As String = "https://adresse.net"
    17. Dim client As New Net.Http.HttpClient
    18. Dim JsonData As String = JsonConvert.SerializeObject(c)
    19. Dim request As WebRequest = WebRequest.Create(RestURL)
    20. request.ContentType = "application/json"
    21. request.Method = "POST"
    22. Using streamWriter = New StreamWriter(request.GetRequestStream())
    23. streamWriter.Write(JsonData.ToString())
    24. streamWriter.Flush()
    25. streamWriter.Close()
    26. End Using
    27. Try
    28. Dim response As WebResponse = request.GetResponse()
    29. Using output As Stream = File.OpenWrite("D:\test.pdf")
    30. Using input As Stream = response.GetResponseStream()
    31. input.CopyTo(output)
    32. End Using
    33. End Using
    34. MessageBox.Show("Die Datei wurde erfolgreich empfangen.")
    35. Catch ex As Exception
    36. MessageBox.Show("Fehler beim Download, Ex: " & ex.Message)
    37. End Try
    38. End Sub


    VS bemängelt das fehlende await, ich weiss nicht wohin damit.