c# - 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 使用的数据
解决方案
再次查看我的代码后,问题是我set
在所有字符串属性上都有私有访问器,这就是该int
属性仍然通过的原因。
推荐阅读
- html - 对象被点击后留下属性值
- css - CSS文件没有任何效果
- c++ - fopen / ofstream::open 创建 BMP 文件时失败
- node.js - 有效地从另一个猫鼬库中获取用户名
- python - 如何遍历 URL 向量并从每个 URL 中抓取一些基本标签
- asp.net-mvc - 如何获取登录用户 ASP.NET MVC 的项目
- android - 如何使 android:usesCleartextTraffic="true" 仅用于仪器测试?
- microsoft-graph-api - 使用 MsGraph 搜索特定 contentType 的 sharePoint
- python - ValueError:检查目标时出错:预期 c_acti 的形状为 (10,) 但得到的数组的形状为 (1,)
- objective-c - 如何使用 NSTask 检查是否安装了特定的包