【问题标题】:Asp.net core invalid JSONAsp.net 核心无效 JSON
【发布时间】:2020-09-23 12:12:33
【问题描述】:

我在向我的asp.net 服务器发送发布请求时遇到问题。

我的 Json 看起来像这样:

{
     "Name":"NothingZeile224","FimDocument":"PHhkZjp4ZW5zY2hlbWEuMDEwMj4=","FimCodelistPicks":[]
}

当我通过Body 中的HttpRequestMessage 将其发送到我的服务器时,我得到了以下响应:

{
    "errors": {
        "": [
            "Unexpected character encountered while parsing value: {. Path '', line 1, position 1."
        ]
    },
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "|1db3b81f-4ca934b691097e16."
}

如果我删除 JSON 中的大括号,它看起来像这样:

"Name":"NothingZeile224","FimDocument":"PHhkZjp4ZW5zY2hlbWEuMDEwMj4=","FimCodelistPicks":[]

有效。

但我不明白为什么?有人有想法吗?

谢谢

编辑:

这是我的服务器代码:

[Produces("application/json")]
    [ApiController]
    public class MainController : ControllerBase
    {
        [HttpPost]
        [Route("api/ConvertToCirali")]
        public async Task<string> ConvertToCirali([FromBody] string PostSendFim)
        {
            try
            {
                PostModel pm = (PostModel)Newtonsoft.Json.JsonConvert.DeserializeObject(PostSendFim);

                XDocument fim = XDocument.Parse(System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(pm.FimDocument)));

                string jsonOutput = Newtonsoft.Json.JsonConvert.SerializeObject(pm.FimCodelists);

                string MyContent = null;

                using (HttpClient client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Add("Content-Type", "application/json");
                    using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "https://localhost:44398/api/FullCodelists"))
                    {
                        using (StringContent stringContent = new StringContent(Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonOutput)), Encoding.UTF8, "application/json"))
                        {
                            request.Content = stringContent;
                            using (HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead))
                            {
                                MyContent = await response.Content.ReadAsStringAsync();
                            }
                        }
                    }
                }

                List<MongoCodelist> ReturnedCodelists = new List<MongoCodelist>();
                ReturnedCodelists = (List<MongoCodelist>)Newtonsoft.Json.JsonConvert.DeserializeObject(MyContent);

                FormatterFimToCirali fftc = new FormatterFimToCirali(fim, ReturnedCodelists);

                Debug.WriteLine("Hier steht der Text: " + fftc.CiraliFile.ToString());
                return Convert.ToBase64String(Encoding.UTF8.GetBytes(fftc.CiraliFile.ToString()));
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
        }
    }

对不起,如果它看起来有点奇怪,它是用于游戏文件的转换器

【问题讨论】:

  • 请将您的服务器方法也添加到问题中。
  • 请显示您用于发送请求的代码,以及接收请求的代码。发生了一些奇怪的事情,因为它应该适用于有效的 JSON,而不适用于无效的 JSON,而您似乎遇到了相反的情况。但是我们不可能在没有先看到病人的情况下做出诊断或提出治疗方案:-)
  • 您好,抱歉,我想添加但忘记了

标签: c# asp.net asp.net-core post httpclient


【解决方案1】:

您已将参数声明为字符串,因此您需要向其发送 JSON 字符串,而不是 JSON 对象。然后在您的代码中反序列化此字符串

PostModel pm = (PostModel)Newtonsoft.Json.JsonConvert.DeserializeObject(PostSendFim);

您可以跳过一个步骤,让框架为您进行反序列化。只需将参数类型更改为PostModel 而不是string。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 2020-04-20
    • 2018-11-17
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多