我正在同一解决方案中将对象从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
[再次查看我的代码后,问题是我在所有字符串属性上都具有对私有的set
访问器,这就是int
属性仍然可以通过的原因。