#c#
#c#
Вопрос:
У меня есть интерфейсное приложение MVC, которое использует общий веб-вызывающий для доступа к внутреннему API. В настоящее время он всегда использует одни и те же типы объектов запроса и ответа.
public static async Task<T> CallPostWebApi<T>(T t, string serviceUrl)
который преобразует t в json и передает в API
var json = JsonConvert.SerializeObject(t);
var formData = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync(serviceUrl, formData);
и возвращает тот же тип объекта, что и ответ:
var data = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(data);
итак, я могу назвать это следующим образом:
return await ApiCaller.CallPostWebApi(inputModel, _url);
но что нужно уметь делать сейчас, так это отправлять другой объект запроса объекту ответа. Итак, я хочу иметь возможность вызывать
return await ApiCaller.CallPostWebAPI(inputModel, outputModel, _url);
Я пытался реализовать статический метод в ApiCaller, используя разные общие комбинации, но, похоже, ни одна из них не работает.
Комментарии:
1. Возможно, вы захотите переименовать это, это технически неверно и вводит в заблуждение:
var formData = new StringContent(json, Encoding.UTF8, "application/json")
.formData
должно бытьjsonContent
или толькоcontent
событие
Ответ №1:
Это должно быть довольно тривиально сделать, если вы используете 2 общих параметра:
public static async Task<TResponse> CallPostWebApi<TRequest, TResponse>(TRequest request, string serviceUrl)
{
...
return JsonConvert.DeserializeObject<TResponse>(data);
}
Обратите внимание, однако, что при вызове метода вам придется указать оба параметра:
var response = await CallPostWebApi<SomeRequest, SomeResponse>(request, "url");
Комментарии:
1. это здорово, спасибо. Вызов выглядит следующим образом: var response = await CallPostWebApi(запрос, ответ, URL)