Я просмотрел несколько похожих постов, но у всех были некоторые важные детали, которые не применимы в моем случае.У меня есть сервис Shopper с методом Register.Он построен на .NET Framework 4.6.1 Web API.У меня есть несколько рабочих сценариев, в которых другая служба веб-API .NET Framework 4.6.1 вызывает службу Shopper с использованием HttpClient и HttpRequestMessage.Я делаю это с помощью методов GET, PUT и POST и успешно передаю данные в методы PUT и POST, используя
request.Content = new ObjectContent<MemberAddress>(memberAddress, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
. Сейчас я разрабатываю новый сервис, основанный на ASP.NET Core Web API,Я пытаюсь вызвать действие POST в сервисе Shopper.Я получаю свой HttpClient от IHttpClientFactory.CreateClient.Я думаю, что настройка HttpRequestMessage такая же, как и в других моих службах вызова.
var request = new HttpRequestMessage(HttpMethod.Post, updateShopperUrl);
request.Content = new ObjectContent<MemberRegistration>(memberRegistration, new System.Net.Http.Formatting.JsonMediaTypeFormatter(), "application/json");
Вызов службы выглядит следующим образом:
var httpClient = _clientFactory.CreateClient();
var response = await httpClient.SendAsync(request);
Я могу проверить request.Content.Value перед вызовом, и он содержит ожидаемый объект / данные.Код действия контроллера на другом конце выглядит следующим образом:
[Route("{shopperId}/register")]
[Route("~/api/shopper/{shopperId}/register")]
[HttpPost]
public IHttpActionResult RegisterNewMember(string shopperId, [FromBody] MemberRegistration memberRegistration)
{
Но параметр memberRegistration всегда равен нулю.Атрибут [FromBody] является недавним дополнением в попытке решить эту проблему, но это не помогло.В любом случае FromBody должен быть поведением по умолчанию для параметра сложного объекта.Я могу POST к этой конечной точке с Почтальоном, и данные memberRegistration приходят через.
Либо я просто упускаю что-то очевидное, либо, может быть, что-то другое происходит в вызывающей стороне уравнения ASP.NET Core.