【问题标题】:BadRequest when PUT JSON data on Firebase REST API在 Firebase REST API 上放置 JSON 数据时出现 BadRequest
【发布时间】:2018-06-02 15:48:36
【问题描述】:

我有这段代码用于将我的 JSON 字符串放入 Firebase 数据库:

RestRequest request = new RestRequest("MemberAndChannels/{userId}/{channelId}.json", Method.POST);

request.RequestFormat = DataFormat.Json;
request.AddParameter("auth", accessKey);
request.AddUrlSegment("userId", user.UUID);
request.AddUrlSegment("channelId", channel.UUID);
request.AddHeader("Content-Type", "application/json; charset=utf-8");

request.AddJsonBody(channelJson);

IRestResponse response = client.Execute(request);

if (response.StatusCode == HttpStatusCode.OK)
{

} 
else {

}

但我收到以下错误(状态代码:BadRequest):

"{\n  \"error\" : \"Invalid data; couldn't parse JSON object, array, or value.\"\n}\n"

我已经尝试使用 curl 输入相同的数据,并且成功了。不知道我哪里做错了。

【问题讨论】:

  • 什么是channelJson
  • 您的请求有一些错误。 channelJson 是 String 还是 Json Object。?
  • channelJson 是 String 格式的 Json 对象。这就是我得到channelJson的方式: var channelJson = new JavaScriptSerializer().Serialize(channel);这里的通道是一个类的对象。
  • 能否在控制台打印channelJson值并检查请求是否准备正确?
  • 这里是 channelJason 的值:{\"ChannelName\":\"Best\",\"ChannelImageUrl\":\"firebasestorage.googleapis.com/v0/b/chat-demo-25252.appspot.com/…\\u0026token=3q11ac21-7414-6562-85b4- 111ffdda0047\",\"UUID\":\"24C9955C-AC97-4741-2314-5E950712A826\"}

标签: c# asp.net firebase-realtime-database restsharp


【解决方案1】:

对象被序列化两次(双重序列化)。

channel 对象原样传递给AddJsonBodyrequest 将在发送正文之前将其序列化为 JSON

request.AddJsonBody(channel);

这里假设channel 是一个类的对象

【讨论】:

  • 感谢您的回答。但是错误仍然存​​在并且相同。
【解决方案2】:

我已经对代码进行了细微的修改。请试试这个

RestRequest request = new RestRequest("MemberAndChannels/{userId}/{channelId}.json", Method.POST);
request.AddParameter("auth", accessKey); // or request.AddHeader("auth", accessKey);
request.AddUrlSegment("userId", user.UUID);
request.AddUrlSegment("channelId", channel.UUID);

request.AddHeader("Content-Type", "application/json");
request.AddHeader("Accept", "application/json");
request.AddParameter("application/json", channelJson, ParameterType.RequestBody);

IRestResponse response = client.Execute(request);

if (response.StatusCode == HttpStatusCode.OK)
{

} 
else {

}

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。

    我很乐意更改此代码:

    request.AddParameter("auth", accessKey);
    

    通过

    request.AddQueryParameter("auth", accessKey);
    

    希望对你有帮助。

    问候

    【讨论】:

    • 在获取请求的情况下,添加参数将被视为 AddQueryParameter。但是,您可以通过更改为 AddQueryParameter 来检查。
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2013-08-29
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    相关资源
    最近更新 更多