首页 > 解决方案 > RestSharp 一些对象值通过 PUT 或 POST 作为 null 发送到 API

问题描述

我在同一个解决方案中将一个对象从我的 Web 项目发送到我的 API 项目。我有一个类使用 RestSharp 并充当所有服务的 API 的发送者。

目前,有一个 API 控制器正在接收对象,但并非所有参数都被保留并通过 PUT 显示为空值。但是,使用 ApiClient 的“PutAsync”的不同控制器接收其自己的对象,其中所有值都完好无损。

我什至尝试更改以 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;
        }
    }

在Parameters下找到请求发出前的
数据如下: 发送到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 使用的数据

标签: c#asp.net-coreasp.net-core-webapirestsharp

解决方案


再次查看我的代码后,问题是我set在所有字符串属性上都有私有访问器,这就是该int属性仍然通过的原因。


推荐阅读