我有一个带有两个微服务的MVC应用程序。在第一个我调用PostAsync()
方法来发送我的自定义对象
public class Logo {
public Guid Id { get; set; }
public IEnumerable<byte> Content { get; set; }
}
到另一个服务
public async Task PostLogo(Logo logo)
{
using (var client = new HttpClient())
{
await client.PostAsync(_url, new StringContent(JsonConvert.SerializeObject(logo), Encoding.UTF8, "application/json"));
}
}
在第二个微服务中,我尝试使用
进行反序列化[HttpPost, Route("logo")]
public Task<FileUploadResultModel> SaveAsync([FromBody]Logo model)
{
return _fileService.SaveAsync(null);
}
但它变为null而不是输入对象
有人可以解释如何使用Post请求发送/处理自定义对象吗?
答案 0 :(得分:1)
更新操作以遵循首选语法结构。
[HttpPost, Route("logo")]
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) {
if(ModelState.IsValid) {
FileUploadResultModel result = await _fileService.SaveAsync(model);
return Ok(result);
}
return BadRequest();
}
根据注释,字节数组可能太大,因此模型绑定器无法正确绑定模型。检查 web.config ,查看可以发送的最大数据大小。您可能需要增加它。最大值是2GB,但我建议不要这么高的值。
检查此答案:Maximum request length exceeded
如果您能够缩小图像,则应该将base64 Url编码为字符串并将其作为内容发送。
public class Logo {
public Guid Id { get; set; }
public string Content { get; set; }
}
当你得到模型时,将内容转换回字节数组
[HttpPost, Route("logo")]
public async Task<IHttpActionResult> SaveAsync([FromBody]Logo model) {
if(ModelState.IsValid) {
byte[] content = Convert.FromBase64String(model.Content);
var id = model.Id;
//...
return Ok(result);
}
return BadRequest();
}