RestSharp некоторые значения объекта отправляются как нулевые в API через PUT или POST - PullRequest
0 голосов
/ 23 марта 2020

Я отправляю объект из моего веб-проекта в мой 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

1 Ответ

0 голосов
/ 24 марта 2020

После повторного просмотра моего кода проблема заключалась в том, что у меня был set метод доступа private для всех строковых свойств, поэтому свойство int все еще передавалось.

...