2016-05-26 2 views
0

Я установил сервер Jetty (написанный на Java), который обрабатывает HTTP-запросы. Сервер отлично работает, и когда я использую клиент Jetty HTTP, у меня нет проблем.Отправка HTTP-кодированного запроса C#

Теперь я пытаюсь отправить запросы на сервер с C#. Вот мой код -

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

class Requests 
{ 
public static void Main() 
{ 
    RunAsync().Wait(); 
} 

static async Task RunAsync() 
{ 
    using (var client = new HttpClient()) 
    { 
     client.BaseAddress = new Uri("http://localhost:8080/"); 
     var request = new HttpRequestMessage(HttpMethod.Post, "create"); 

     var postData = new List<KeyValuePair<string, string>>(); 
     postData.Add(new KeyValuePair<string, string>("Topics001", "Batman")); 
     postData.Add(new KeyValuePair<string, string>("Account", "5")); 

     foreach (KeyValuePair<string,string> s in postData) 
      Console.WriteLine(s); 

     request.Content = new FormUrlEncodedContent(postData); 

     var response = await client.SendAsync(request); 
    } 
} 
} 

Я могу подтвердить с моего сервера, что он получающий запрос на правильный адрес, но по непонятным причинам, содержание запроса является недействительным. Он никогда не получает контент, который я пытаюсь отправить.

Что может быть неправильным?

ответ

1

Считаете ли вы использование WebClient вместо HttpClient? Он позаботится о большей части кода HTTP-программирования:

using System; 
using System.Collections.Specialized; 
using System.Net; 
using System.Threading.Tasks; 

namespace MyNamespace 
{ 
    public class Requests 
    { 
     public static void Main() 
     { 
      RunAsync().Wait(); 
     } 

     static async Task RunAsync() 
     { 
      using (var client = new WebClient()) 
      { 
       var postData = new NameValueCollection() 
       { 
        {"Topics001", "Batman"}, 
        {"Account", "5"} 
       }; 

       var uri = new Uri("http://localhost:8080/"); 
       var response = await client.UploadValuesTaskAsync(uri, postData); 

       var result = System.Text.Encoding.UTF8.GetString(response); 
      } 
     } 
    } 
} 
+0

Я довольно новичок в C#. Попытка этого в Visual Studio вызывает ошибку компиляции - «Namespace« UI »не существует в« System.Web ». Вы забыли добавить ссылку?» Что это может означать? –

+0

Кроме того, как я могу запустить это? Вызовите Page_Load из другого метода с помощью класса Main? Какие параметры я бы прошел? –

+1

Да, извините. Я сделал это в веб-проекте, поэтому его вызывают из загрузки страницы. Вы не нуждаетесь в загрузке страницы и можете просто скопировать метод и вызвать его из основного – Jonathan

Смежные вопросы