将 JSON 反序列化为自定义 class returns null

Deserialize JSON to custom class returns null

我有一个包含两个微服务的 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 请求 send/process 自定义对象?

更新操作以遵循首选语法结构。

[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,但我建议不要设置这么高的值。

检查这个答案:超过最大请求长度

如果您能够将图像缩小,您应该使用 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();
}