RestSharp通过PUT或POST将某些对象值作为null发送给API

问题描述 投票:0回答:1

我正在同一解决方案中将对象从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;
        }
    }

在发送之前,请求中的数据,在参数下找到,如下所示:Data sent to 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");
            }
        }   
    }

这是参数中显示的数据:Data Consumed by API UserController

c# asp.net-core asp.net-core-webapi restsharp
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.