Я отправляю объект из моего веб-проекта в мой API-проект в рамках того же решения. У меня есть класс, который использует RestSharp и выступает в качестве отправителя API для всех служб. В настоящее время существует один контроллер API, который получает объект, но не все параметры сохраняются и отображаются с нулевыми значениями через PUT. Однако другой контроллер, использующий ApiClient PutAsyn c, получает свой собственный объект со всеми значениями без изменений. Я даже пытался изменить метод для получения в качестве POST, но все еще безуспешно. Я что-то упустил или что-то не так происходит с сериализацией / десериализацией объекта?
public class UserInfo
{
public int UserId { get; set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string EmailAddress { get; private set; }
}
internal class WebService : IWebService
{
public async Task<bool> UpdateProfile(UserInfo userInfo)
{
try
{
var url = "/User/UpdateProfile";
return await apiClient.PutAsync<UserInfo, bool>(url, userInfo);
}
catch (Exception ex)
{
this.logger.LogError("Error in UpdateProfile", ex);
throw;
}
}
}
Настройка RestSharp
internal class ApiClient : IApiClient
{
public async Task<TOut> PutAsync<TIn, TOut>(string url, TIn data) where TIn : new()
{
return await PushData<TIn, TOut>(url, data, Method.PUT);
}
private async Task<TOut> PushData<TIn, TOut>(string url, TIn data, Method method) where TIn : new()
{
var request = new RestRequest(url, method);
request.AddHeader(HttpRequestHeader.Authorization.ToString(), $"Bearer {GetApiAccessToken()}");
request.AddJsonBody(data);
var result = await client.ExecuteAsync<TOut>(request);
if (result.StatusCode != HttpStatusCode.OK)
{
throw new Exception("Unable to push API data");
}
return result.Data;
}
}
Данные в запросе перед отправкой, найденные в параметрах, следующие: Данные, отправленные в API UserController
[Produces("application/json")]
[ApiController]
[Authorize]
[Route("api/[controller]")]
public class UserController : ControllerBase
{
[HttpPut]
[Route("UpdateProfile")]
public async Task<IActionResult> UpdateProfile([FromBody] ProfileUpdateInfo profileInfo)
{
try
{
var status = await this.service.UpdateProfile(profileInfo);
return Ok(status);
}
catch (Exception ex)
{
return BadRequest("Error in updating profile");
}
}
}
Эти данные отображаются в параметре: Данные потребляются API UserController