当前位置: 首页 > 知识库问答 >
问题:

尝试使用HttpRequestMessage发送JSON正文时的错误响应

邓阳伯
2023-03-14

我需要使用JSON发送身体参数。我正在使用Printify API。我不断从服务器得到错误响应,我的身体参数是空的。

这是我试图创建的命令:

POSThttps://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消息:验证失败。原因:文件名:文件名字段是必需的。内容:当url不存在时,内容字段是必需的。url:当内容不存在时,url字段是必需的。

我做错了什么???

共有2个答案

樊烨烨
2023-03-14

可能必须重命名JsonContentParams中的FileName,以便与该服务中预期的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; }
}

试试这样的东西,告诉我是否有效。

万俟旭
2023-03-14

FileName属性将被序列化为FileName,并且与文件名约定不匹配。更改属性以匹配或指定序列化上的映射架构,以将文件名转换为文件名。您可以通过在FileName属性上指定[JsonProperty(“file_name”)]属性来进行映射。大概是这样的:

public class ImageContentsParams
{
    [JsonProperty("file_name")] 
    public string FileName { get; set; }
    public string Contents { get; set; }
}
 类似资料:
  • dispatcher Servlet中的配置 我在用杰克逊罐子 jackson-core-asl-1.9.0.jar Jackson-Mapper-ASL-1.9.0.jar json-lib-0.9.jar Spring版本是3.2.4

  • 问题内容: 我正在尝试使用java解析JSON字符串。我不知道该怎么做,我在互联网上搜索了很多内容,但有了一些主意。有了我,我有构建代码,但它不起作用。当尝试执行我的代码时,它将引发错误。我无法解决错误。 看到下面是我的代码: 我的JSON字符串在该文件中: 当我执行代码时,它会引发如下错误: 请帮助我解决这个问题,在此先感谢 问题答案: 您的json在Java中解析错误。在Java中,最大值为

  • 我试图从部署在Jetty中的war中实现一个JSR356 websocket连接。 我将此作为指南:http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty91.html (我可以找到很多关于在嵌入式jetty服务器上基本使用JSR356的教程,但是没有关于在现有服务器中构建websocket连接的教程--有什么好的教程

  • 谁能帮帮我。 我得到一个NoClassDefFound错误,我不知道为什么。 这是我的主要课程: 下面是我的堆栈跟踪:

  • 我已经创建了一个简单的Spring Web MVC应用程序,该应用程序从酒店API获取json Web响应,但是当我尝试从根节点使用findPath()方法时,我收到错误。我正在使用Jackson Library进行json解析。代码如下: 第3行产生错误。 这是我的网络回复: 错误消息: HTTP 状态 500 - 处理程序处理失败;nested exception is java.lang.N

  • 这是我第一次处理SSLSockets, 谢谢你, 编辑1:我启用了调试,这是调试: