C# webapi POST melalui program konsol

Saya memiliki api web yang berhasil saya akses melalui browser :-

https://127.0.0.1:8443/ncrApi

Saya mencoba membuat program konsol sederhana di C# menggunakan VS2015 untuk mengirim data dan menerima respons menggunakan http POST.

Inilah yang saya miliki sejauh ini: -

using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

namespace WebSample
{

    class ApiSendData
    {
        public string UserID { get; set;}  // username 
        public string Password { get; set;}  // password for the webapi

        public string ApiFunction { get; set; }
        public string DppName { get; set; }
        public string ClearData { get; set; }
        public string DppVersion { get; set; }
    }



    class Program
    {
        static void Main(string[] args)
        {
            // The Main function calls an async method named RunAsync 
            // and then blocks until RunAsyncc completes.
            RunAsync().Wait();
        }

        static async Task RunAsync()
        {
            using (var client = new HttpClient())
            {

                //specify to use TLS 1.2 as default connection
                System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

                // This code sets the base URI for HTTP requests, 
                // and sets the Accept header to "application/json", 
                // which tells the server to send data in JSON format.
                client.BaseAddress = new Uri("https://localhost:8443/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


                // HTTP POST
                var datatobeSent = new ApiSendData()
                                    {
                                        UserID = "xxxx",
                                        Password = "yyyy",
                                        ApiFunction ="NcrSecureData",
                                        DppName ="CSampleCustomer",
                                        DppVersion ="Latest",
                                        ClearData ="1234567890",
                                        ResultType = "JSON"
                                    };

                HttpResponseMessage response = await client.PostAsJsonAsync("ncrApi", datatobeSent);

                if (response.IsSuccessStatusCode)
                {
                    // Get the URI of the created resource.
                    Uri ncrUrl = response.Headers.Location;

                    // do whatever you need to do here with the returned data //


                }
            }
        }
    }
}

Dalam variabel respons saya, saya mendapatkan pesan 200 OK http 1.1, dengan tipe konten = aplikasi/json dan panjang konten = 174... tetapi tidak ada data aktual yang diterima...

variabel ncrUrl juga nol....

Saya bertanya-tanya apakah saya memerlukan pernyataan tambahan di program konsol saya untuk menerima data?

Inilah yang saya ikuti:- http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client


person Philo    schedule 25.07.2016    source sumber
comment
Apa hasilnya? string payload = await response.Content.ReadAsStringAsync();   -  person Crowcoder    schedule 26.07.2016
comment
{StatusCode: 200, ReasonPhrase: 'OK', Versi: 1.1, Konten: System.Net.Http.StreamContent, Header: { X-Frame-Options: tolak X-XSS-Protection: 1; mode=blok X-Content-Type-Options: nosniff Koneksi: close Accept-Ranges: bytes Date: Sen, 25 Jul 2016 21:39:00 GMT ETag: 579686f4.174 Content-Length: 174 Content-Disposition: attachment; nama file=results.json Tipe Konten: application/json Terakhir Dimodifikasi: Sen, 25 Juli 2016 21:39:00 GMT }}   -  person Philo    schedule 26.07.2016
comment
Saya merasa setelah ini, data aktual harus diterima dari api.   -  person Philo    schedule 26.07.2016
comment
Itu terlihat seperti JSON jadi menurut saya ini berfungsi tetapi operasi ncrApi Anda mungkin tidak melakukan apa yang Anda pikirkan.   -  person Crowcoder    schedule 26.07.2016
comment
Tetapi ketika saya mengaksesnya dari browser... dan menyediakannya dengan data yang sama, itu memberi saya file keluaran yang dapat diunduh. dan file itu juga memiliki konten yang tepat.   -  person Philo    schedule 26.07.2016
comment
Saya merasa, saya hanya mendapatkan bagian pertama dari pesan 200OK... dan ada bagian kedua dari pesan yang berisi data keluaran... tetapi tidak yakin bagaimana cara mengaksesnya.   -  person Philo    schedule 26.07.2016


Jawaban (1)


Setelah membaca komentar, tampaknya api Anda dikonfigurasi untuk mengembalikan file, bukan konten string seperti JSON atau XML. Anda dapat menggunakan Metode HttpContent.ReadAsStreamAsync untuk membaca aliran respons dan menyimpannya ke file.

HttpResponseMessage response = await client.PostAsJsonAsync("ncrApi", datatobeSent);

using (Stream output = File.OpenWrite("filename.txt")) // change
{
    using (Stream input = await response.Content.ReadAsStreamAsync())
    {
        input.CopyTo(output);
    }
}
person jegtugado    schedule 25.07.2016
comment
Definisi GetResponseStream() tidak terdapat dalam HttpResponseMessage... - person Philo; 26.07.2016
comment
@Philo ya maaf sudah terlalu lama sejak terakhir kali saya menggunakan HttpResponseMessage. Lihat jawaban saya yang diperbarui. Gunakan ReadAsStreamAsync() sebagai gantinya. - person jegtugado; 27.07.2016