2014-09-12 3 views
0

У меня возникли проблемы с вызовом API. Мне нужно отправить данные сообщения, содержащие 2 вещи: идентификатор и массив строк.C# HttpClient отправить многоформатные данные сообщения

Я пробовал много вещей, все из-за ошибок или просто не отправляя данные в правильном направлении. Все ответы, которые я нашел, не обрабатывают тот факт, что я хочу отправить 2 разных типа данных.

Мой текущий C# код, как это:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(SERVER_URI); 
var content = ; //This is where I need help 
HttpResponseMessage response = client.PostAsync("API URL", content).Result; 

Функция API устанавливается следующим образом:

public ActionResult Function(int Id, string[] array) 
{ 
    // Contents are not relevant 
} 

Проблема здесь в том, что мне нужно, чтобы иметь возможность установить имена ценности. Я попытался сериализации необходимые данные Json с помощью следующего кода:

StringContent content = new System.Net.Http.StringContent(TypeSerializer.SerializeToString(new { Id = Id, array = array })); 

Конечно, Id и буев в этом примере заполнены переменные. Это приводит к успешному вызову на сервер, но сервер не получает данные правильно (обе переменные остаются пустыми)

Я также пытался сделать это с помощью MultiPartContent, но еще раз не вижу никакого способа на самом деле дают правильные имена значений (Каждая попытка в очередной раз приводит к API получения нулевых значений)

Edit:

Я получил его, чтобы отправить Id используя MultipartFormDataContent вместо этого.

MultipartFormDataContent content = new MultipartFormDataContent(); 
content.Add(new StringContent(Id), "Id"); 

Я все еще не могу заставить его отправить массив на сервер.

ответ

0

Wrap вещи в объект, как этот

public class MyPostObject 
{ 
    public int Id{get;set;} 
    public IEnumerable<string> Array{get;set;} 
} 

затем отправить его в формате JSON

using (var client = new HttpClient()) 
{ 
    var myObject = new MyPostObject(){Id =XXXX, Array = YYYYY}; 
    using (var response = await client.PostAsJsonAsync("api/CONTROLLER/METHOD", myObject)) 
    using (var content = response.Content) 
    { 
     var result = content.ReadAsAsync<LoginModelResponse>().Result; 
    } 
} 

и получить его как JSON, как это на сервере

[HttpPost] 
public dynamic METHOD([FromBody] MyPostObject mydata) 
{ 
    //Do whatever 
} 
+0

Я пытался избегать создания объектов. В основном потому, что типизированные объекты должны присутствовать на 2-х местах, и это не делает очень удобный код. Я закончил тем, что просто отправил отформатированный массив JSON в виде строки и десериализовал это обратно в строку [] на стороне API. – Chirimorin

+1

вы всегда можете поместить общие объекты в dll и ссылаться на них: D – dariogriffo

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