我需要使用JSON发送正文参数。我正在使用Printify API。 我不断从服务器收到错误响应,我的身体参数为空。
这是我要创建的命令:
POST https://api.printify.com/v1/uploads/images.json
它需要包含主体参数(这是API指南中的示例):
BODY PARAMETER (UPLOAD IMAGE BY BASE64-ENCODED CONTENTS)
{
"file_name": "image.png",
"contents": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
}
这是我的代码:
public class ImageContentsParams
{
public string FileName { get; set; }
public string Contents { get; set; }
}
ImageContentsParams imageContents = new ImageContentsParams();
imageContents.FileName = "example.png";
byte[] imageArray = System.IO.File.ReadAllBytes("D:\\example.png");
imageContents.Contents = Convert.ToBase64String(imageArray);
var json = JsonConvert.SerializeObject(imageContents);
using (HttpClient client = new HttpClient())
{
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.printify.com/v1/uploads/images.json");
request.Content = jsonBody;
using (HttpResponseMessage res = await client.SendAsync(request))
{
// here I'm checking the returned response
}
}
我不断从Prinify服务器获得以下错误响应(这是在解析之后):
代码:10100 消息:验证失败。 原因: file_name:必填文件名字段。 contents:不存在url时,内容字段是必填字段。 url:如果不存在内容,则必须输入url字段。
我在做什么错??
答案 0 :(得分:1)
FileName属性将序列化为 fileName ,并且与 file_name 约定不匹配。更改属性以匹配或在序列化上指定映射架构,以将FileName转换为file_name。 您可以通过在FileName属性上指定[JsonProperty(“ file_name”)]属性来进行映射。像这样:
public class ImageContentsParams
{
[JsonProperty("file_name")]
public string FileName { get; set; }
public string Contents { get; set; }
}
答案 1 :(得分:0)
可能您的FileName
中的JsonContentParams
必须重命名为与该服务中期望的 JSON 相同。这是因为参数将被序列化,并且与服务的规范不匹配。
public class ImageContentsParams
{
public string file_name { get; set; }
public string contents { get; set; }
}
另一种解决方案是添加JsonProperty
属性,以免重构所有代码。
public class ImageContentsParams
{
[JsonProperty("file_name")]
public string FileName { get; set; }
[JsonProperty("contents")]
public string Contents { get; set; }
}
尝试类似的方法,然后告诉我是否可行。