2013-06-05 91 views
0

我正在使用HttpClient通过C#控制台应用程序使用后发送数据到服务器。 HttpClient PostAsync无法发布我试图以各种格式发送的数据 即字符串内容,二进制内容,流内容,http内容通过Dictionary对象但post是空的,服务器返回请求无效的异常下面是我的代码无法通过HttpClient发布数据PostAsync

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; 

     } 



     } 

} 

在此先感谢

+3

你看发生了什么事时,透过Wireshark的提琴手或HTTP级别? –

回答

0

在控制台应用程序,你需要等待操作完成,或者使用Task.WaitConsole.ReadKey,或类似的。此外,避免async void

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

public async Task StartedAsync() 
+0

我试过这个,但是这对我不起作用我得到了同样的无效请求异常 –

+0

请编辑你的问题,包括堆栈跟踪在内的异常细节。 –