【问题标题】:Send Nested JSON with file in HttpClient C#在 HttpClient C# 中发送带有文件的嵌套 JSON
【发布时间】:2020-06-03 05:02:57
【问题描述】:

我想将此对象发送到服务器:

public class Product
    {
        public string name { get; set; }
        public string description { get; set; }        
        public ICollection<Photo> photos { get; set; }

    }

这个对象有其他对象的集合:

public class Photo
    {
        public string url { get; set; }
        public IFormFile file { get; set; }
        public string description { get; set; }
    }

如何发送Product 对象及其Photo 对象集合?以及如何在Photo 对象中发送文件?(我想使用application/json 而不是form-data

【问题讨论】:

  • 你试过什么?什么不起作用?
  • 我认为您可以将文件内容作为字符串发送而不是发送 IFormFile
  • 预期的负载服务器端是什么?你在写服务器和客户端吗?还是只是客户?
  • @viveknuna 对图片有用吗?
  • @zaitsman 我使用表单数据,但是因为我有嵌套的 JSON 发送,所以它不能正常工作。

标签: c# json dotnet-httpclient


【解决方案1】:

您应该将文件内容作为 Base64 字符串发送

像这样创建字符串

Byte[] bytes = File.ReadAllBytes("path\\to\\file.jpg");
String 64string = Convert.ToBase64String(bytes);

然后只需更新您的照片类,为文件添加一个字符串,作为分配它

public class Photo
{
    public string url { get; set; }
    public String fileContents { get; set; }
    public string description { get; set; }
}

Photo p = new Photo() { url = "...", fileContents = 64String, ..... }

当然,这假设您的服务器期望这个并且可以相应地解码!我假设您也在编写服务器端代码。

您可以像这样将其转换回来:

Byte[] bytes = Convert.FromBase64String(64string );
File.WriteAllBytes("path\\to\\file.jpg", bytes);

【讨论】:

  • 它在服务器中被接受为 IFormFile 吗?还是必须更改服务器端?
  • 你需要改回字节
  • @VilsadPP 这种方式适用于其他客户吗?因为我有多个客户端,其中一个用 java 编写,另一个用 javascript 编写。
  • 这是一个字符串。所有客户端都可以接受,Base64 编码/解码是很常见的任务。我敢打赌 Java 和 JavaScript 都可以处理它们。
  • 所有语言都可以对base64字符串进行编码和解码,所以不会有问题
猜你喜欢
  • 2020-07-07
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多