Я создал общий метод, с помощью которого мы публикуем данные в веб-API. И во время публикации я сериализирую данные в json. Ниже мой общий метод.
public HttpResponseMessage GetData<T>(T parm, string url) where T : class
{
try
{
var client = new HttpClient();
var result = client.PostAsync(url, SerializeData<T>(parm));
result.Wait();
if (result.Result.IsSuccessStatusCode)
{
// Do something
}
}
catch (Exception ex)
{
throw ex;
}
return default(HttpResponseMessage);
}
private StringContent SerializeData<T>(T obj)
{
string mediaType = "application/json";
string content = JsonConvert.SerializeObject(obj, formatter);
return new StringContent(content, Encoding.UTF8, mediaType);
}
Это прекрасно работает, если я передаю объект класса из метода вызывающего типа
var result = service.GetData<MyClass>(myclassobj,url);
Тем не менее, для некоторых URL при передаче объекта класса не работает. Итак, мы написали еще один метод, в котором мы публикуем данные в формате FormUrlEncodedContent , как показано ниже, и он отлично работает.
var Parameters = new Dictionary<string, string> { { "Key1", "some value" }, { "Key2", "another value" } };
var EncodedContent = new FormUrlEncodedContent(Parameters);
var postTask = _client.PostAsync(url, EncodedContent);
Я пытался отправить данные FormUrlEncoded в метод JSON, а также изменил тип носителя. Но не в состоянии правильно сериализовать его. Апис / услуги, которые мы потребляем, предоставляются сторонними поставщиками.
Поэтому мой вопрос: какие изменения необходимы в методе, который будет работать со всеми форматами, такими как JSON, FormUrlEncodedContent и т. Д.
Кроме того, это зависит от того, как написаны API-интерфейсы, в которые они будут работать только с определенными форматами, такими как JSON, FormUrlEncodedContent и т. Д.
В основном я пытаюсь сохранить один общий метод, который будет поддерживать все форматы.
Любая помощь по этому вопросу приветствуется!