2017-08-28 51 views
1

我有一个带有两个微服务的MVC应用程序。在第一个我称之为PostAsync()方法来我的自定义对象将JSON反序列化为自定义类返回null

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); 
    } 

反序列化,但它得到空代替输入对象

enter image description here

任何人都可以解释我怎么可以发送/处理自定义对象使用Post请求?

+0

更新行动'任务 SaveAsync([FromBody] OutlookLogo模型)'。框架将为您反序列化并绑定对象模型 – Nkosi

+0

谢谢您的回答。不幸的是,在实际的反序列化之前,它在输入字符串中为'null'。我的意思是'模型'值为null,但如果我检查'JsonConvert.SerializeObject(logo)',它会返回实际结果和必要的参数。所以我认为我在发送请求时做错了什么? –

+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网址编码图像为字符串,并发送,作为内容。

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(); 
}