Невозможно опубликовать данные через HttpClient PostAsync

Я использую HttpClient для отправки данных на сервер через консольное приложение С# с помощью post . HttpClient PostAsync не может опубликовать данные, которые я пытался отправить в различном формате, т. е. строковое содержимое, двоичное содержимое, потоковое содержимое, содержимое http через объект Dictionary, но сообщение имеет значение null, и сервер возвращает недопустимое исключение запроса ниже, это мой код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Windows;
using System.Windows.Input;
using System.IO;
using System.Web;


namespace ConsoleApplication1
{
    class Program
    {
        string str = ""; int j = 0;
        static void Main(string[] args)
        {
            Program df = new Program();

            df.Started();

        }


         public async void Started()
         {
             string contentLength="0";
             try
             {
                 contentLength = await AccessTheWebAsync();
             }
             catch (Exception e)
             {

             }


             Console.WriteLine(contentLength);
         }

        async Task<string> AccessTheWebAsync()
        {  
            HttpClient client = new HttpClient();

            string token =  "qwerty1234";
            string test = "1";
            string postrequest = "<?xml version='1.0' encoding='UTF-8'?>" +
                              "<request> " +
                              "<rec>asdf1234</rec> " +
                              " <lid>9876</lid> " +
                              "</request> ";


            Dictionary<string, string> dict = new Dictionary<string, string>();
            dict.Add("token", token);
            dict.Add("test", test);
            dict.Add("request", postrequest);

            HttpContent content = new FormUrlEncodedContent(dict);

            Uri url = new Uri("http://example.com/"); 

            Task<HttpResponseMessage> getStringTask = client.PostAsync(url, content);    

            HttpResponseMessage httpmesssage = await getStringTask;
            Stream respons = await httpmesssage.Content.ReadAsStreamAsync();
            StreamReader sr = new StreamReader(respons);
            string response =  sr.ReadToEnd();
            return response;

        }



        }

}

заранее спасибо


person priya poojari    schedule 05.06.2013    source источник
comment
Вы смотрели, что происходит на уровне HTTP через Wireshark или Fiddler?   -  person Jon Skeet    schedule 05.06.2013


Ответы (1)


В консольном приложении вам нужно дождаться завершения операции, используя Task.Wait, Console.ReadKey или что-то подобное. Также избегайте async void:

static void Main(string[] args)
{
    Program df = new Program();
    df.StartedAsync().Wait();
}

public async Task StartedAsync()
person Stephen Cleary    schedule 05.06.2013
comment
Я пробовал это, но это не работает для меня, я получаю то же исключение недопустимого запроса - person priya poojari; 06.06.2013
comment
Пожалуйста, отредактируйте свой вопрос, указав детали исключения, включая трассировку стека. - person Stephen Cleary; 06.06.2013