Download PDF-Datei vom API Mit C#

Ich bin eine Konsolenanwendung erstellen, die

  1. Verbindet auf eine Hersteller-API zu ziehen-Gutschein zahlen für eingereichte Kosten zwischen zwei Datumsangaben und
  2. Downloads eine PDF-Kopie der Quittungen vorgelegt mit den Kosten

Den ersten Teil habe ich gut funktioniert. Ich bin in der Lage zu verbinden, um die Anbieter-API und analysiert das zurückgegebene XML zu erstellen, die ein array von Gutschein-Nummern (benötigt, um die PDF-Bilder) mit dem folgenden code:

static async Task RunAsyncCR()
        {
            using (var client = new HttpClient())
            {
                var values = new Dictionary<string, string>
                {
                    {"un","SomeUser"},
                    {"pw","SomePassword"},
                    {"method","getVoucherInvoices"},
                    {"fromDate","05/30/2016"},
                    {"toDate", "06/13/2016"}
                };

                var content = new FormUrlEncodedContent(values);

                Console.WriteLine("Connecting...");

                var response = await client.PostAsync("https://www.chromeriver.com/receipts/doit", content);

                Console.WriteLine("Connected...");

                var responseString = await response.Content.ReadAsStringAsync();

                char[] DelimiterChars = {'<'};

                String[] xmlReturn = responseString.Split(DelimiterChars);

                string[] VoucherNumber = new string[500];

                int i = 0;

                foreach (string s in xmlReturn)
                {
                    if (s.Contains("voucherInvoice>") && s != "/voucherInvoice>\n    ")
                    {
                        VoucherNumber[i] = s.Substring(15, 16);

                        i++;
                    }
                }

                Array.Resize(ref VoucherNumber, i);

Ja, es ist wahrscheinlich ein besserer Weg, dies zu tun, aber es funktioniert und gibt die Werte aus, die ich erwarte.

Nun, was ich bin Probleme mit, wenn ich die Verbindung zu der API zum abrufen der Datei, ich kann nicht scheinen zu können, laden Sie die Datei in einem bestimmten Pfad.

Kann ich die Verbindung zu der API mit

            i = 0;

            foreach (string x in VoucherNumber)
            {
                Console.WriteLine("Get receipt: " + x);

                var NewValues = new Dictionary<string, string>
                {
                    {"un","SomeUser"},
                    {"pw","SomePassword"},
                    {"method","getReceiptsWithCoverPage"},
                    {"voucherInvoiceForPdf", VoucherNumber[i]}
                };

                var NewContent = new FormUrlEncodedContent(NewValues);

                var NewResponse = await client.PostAsync("https://www.chromeriver.com/receipts/doit", NewContent);

                string NewResponseString = await NewResponse.Content.ReadAsStringAsync();

Aber ich kann nicht scheinen, um zu schreiben die Antwort auf eine gültige Datei (PDF)

Hier ist ein screen shot von meinen Autos-Fenster, wie ich Schritt für Schritt durch den code, wo ich brauchen würde um die Datei zu downloaden:

Download PDF-Datei vom API Mit C#

Meine Frage ist, ab diesem Punkt, wie kann ich das speichern der Datei auf meinem system?

Habe ich versucht, die kodierte Antwort, die ich bekommen aus tun Console.WriteLine(NewResponseString); und schreiben es in eine Datei mit der System.IO.File.WriteAllLines() Methode, mit einer angegebenen Dateipfad/- name, aber diese Ergebnisse in eine leere Datei. Ich habe auch einige Zeit damit verbracht, die Erforschung der tiefen von Google/Stackoverflow, verstehe aber nicht, wie die Umsetzung der Ergebnisse, finde ich.

Jegliche Hilfe würde sehr geschätzt werden.

  • Können Sie fügen Sie den ersten ~20 Byte stream in hexadezimaler hier?
  • Sie haben Erfahrung im Umgang mit Streams? Wenn nicht, dass ist, wo Sie beginnen sollte. Wenn das nicht Ihre Frage vielleicht klären können - benötigen Sie Hilfe speichern einer stream-to-disk oder brauchen Sie Hilfe Extraktion der stream/byte-array aus der Antwort?
  • Ich habe keine Erfahrung in der Arbeit mit streams - dies ist das erste mal, dass ich jemals benötigt, um eine Verbindung zu einer API zum abrufen einer Datei...
InformationsquelleAutor Jeff Beese | 2016-06-13
Schreibe einen Kommentar