gpt4 book ai didi

azure - response.Content.ReadAsStringAsync 不读取所有数据

转载 作者:行者123 更新时间:2023-12-03 04:12:39 26 4
gpt4 key购买 nike

我有一个 azure 函数,可以通过基本身份验证调用 Rest API。服务器的响应没问题,但我有一个问题,只接收从响应返回的部分数据 - 某些字段返回为空。

我正在使用 httpclient 进行其余 API 调用。这是我的代码:

  using (var client = new HttpClient())
{

var webUrl = "https://api.livechatinc.com/chats/XXXXXX";

client.BaseAddress = new Uri(webUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var user = "XXXXXXXXXX";
var password = "XXXXXXXXX";
var base64String = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{user}:{password}"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", base64String);

HttpResponseMessage response = await client.GetAsync(webUrl);
response.EnsureSuccessStatusCode();

//Only getting partial information
string jsonString = await response.Content.ReadAsStringAsync();

//Deserialise JSON
Chat responseData = JsonConvert.DeserializeObject<Chat>(jsonString);

}

当我运行我的 azure 函数调试器时,我可以证明我得到了我期望的 URL 数据的空字段。

enter image description here

请注意,反序列化后,responseData 字段显示 ChatStartUrl 的空值。

这是因为该字段不是从响应内容中返回的。

我已确定这不是我的数据合约和 JSON.net 反序列化。我的数据契约(Contract)是:

 public  class Chat
{
[JsonProperty("type")]
public string Type { get; set; }

[JsonProperty("id")]
public string Id { get; set; }

[JsonProperty("tickets")]
public Ticket[] Tickets { get; set; }

[JsonProperty("visitor_name")]
public string VisitorName { get; set; }

[JsonProperty("visitor_id")]
public string VisitorId { get; set; }

[JsonProperty("visitor_ip")]
public string VisitorIp { get; set; }

[JsonProperty("visitor")]
public Visitor Visitor { get; set; }

[JsonProperty("agents")]
public Agent[] Agents { get; set; }

[JsonProperty("supervisors")]
public object[] Supervisors { get; set; }

[JsonProperty("rate")]
public string Rate { get; set; }

[JsonProperty("duration")]
public long Duration { get; set; }

[JsonProperty("chat_start_url")]
public Uri ChatStartUrl { get; set; }

[JsonProperty("referrer")]
public Uri Referrer { get; set; }

[JsonProperty("group")]
public long[] Group { get; set; }

[JsonProperty("started")]
public string Started { get; set; }

[JsonProperty("custom_variables")]
public object[] CustomVariables { get; set; }

[JsonProperty("pending")]
public bool Pending { get; set; }

[JsonProperty("tags")]
public object[] Tags { get; set; }

[JsonProperty("timezone")]
public string Timezone { get; set; }

[JsonProperty("greeting")]
public Greeting Greeting { get; set; }

[JsonProperty("messages")]
public Event[] Messages { get; set; }

/* [JsonProperty("prechat_survey")]
public PrechatSurvey[] PrechatSurvey { get; set; }*/

[JsonProperty("events")]
public Event[] Events { get; set; }

[JsonProperty("engagement")]
public string Engagement { get; set; }

[JsonProperty("started_timestamp")]
public long StartedTimestamp { get; set; }

[JsonProperty("ended_timestamp")]
public long EndedTimestamp { get; set; }

[JsonProperty("ended")]
public string Ended { get; set; }
}

public class Agent
{
[JsonProperty("display_name")]
public string DisplayName { get; set; }

[JsonProperty("email")]
public string Email { get; set; }

[JsonProperty("ip")]
public string Ip { get; set; }
}

public class Event
{
[JsonProperty("author_name", NullValueHandling = NullValueHandling.Ignore)]
public string AuthorName { get; set; }

[JsonProperty("text")]
public string Text { get; set; }

[JsonProperty("message_json", NullValueHandling = NullValueHandling.Ignore)]
public string MessageJson { get; set; }

[JsonProperty("date")]
public string Date { get; set; }

[JsonProperty("timestamp")]
public long Timestamp { get; set; }

[JsonProperty("agent_id", NullValueHandling = NullValueHandling.Ignore)]
public string AgentId { get; set; }

[JsonProperty("user_type")]
public string UserType { get; set; }

[JsonProperty("type")]
public string Type { get; set; }

[JsonProperty("welcome_message", NullValueHandling = NullValueHandling.Ignore)]
public bool? WelcomeMessage { get; set; }

[JsonProperty("event_type", NullValueHandling = NullValueHandling.Ignore)]
public string EventType { get; set; }
}

public class Greeting
{
[JsonProperty("id")]
public long Id { get; set; }

[JsonProperty("name")]
public string Name { get; set; }
}


public class Ticket
{
[JsonProperty("id")]
public string Id { get; set; }
}

public class Visitor
{
[JsonProperty("id")]
public string Id { get; set; }

[JsonProperty("name")]
public string Name { get; set; }

[JsonProperty("email")]
public string Email { get; set; }

[JsonProperty("ip")]
public string Ip { get; set; }

[JsonProperty("city")]
public string City { get; set; }

[JsonProperty("region")]
public string Region { get; set; }

[JsonProperty("country")]
public string Country { get; set; }

[JsonProperty("country_code")]
public string CountryCode { get; set; }

[JsonProperty("timezone")]
public string Timezone { get; set; }

[JsonProperty("user_agent")]
public string UserAgent { get; set; }
}

有趣的是,其余 api 在 Postman 中运行良好,我可以取回所有数据。

这是我从 postman 回复中得到的内容

{
"type": "chat",
"id": "PPTE7XI3AQ",
"tickets": [
{
"id": "DJWKT"
}
],
"visitor_name": "Rupinder Kaur",
"visitor_id": "S1552009602.e395581450",
"visitor_ip": "49.183.59.243",
"visitor": {
"id": "S1552009602.e395581450",
"name": "Rupinder Kaur",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="bbc9cecbd2d5dfdec9fbd8c9dedacfd2cdda95d8d4d695dace" rel="noreferrer noopener nofollow">[email protected]</a>",
"ip": "49.183.59.243",
"city": "Abbotsford",
"region": "Victoria",
"country": "Australia",
"country_code": "AU",
"timezone": "Australia/Victoria",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
},
"agents": [
{
"display_name": "David",
"email": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2b4f4a5d424f05584e454f4e596b5c4242584e05484446" rel="noreferrer noopener nofollow">[email protected]</a>",
"ip": "203.30.93.14"
}
],
"supervisors": [],
"rate": "not_rated",
"duration": 357,
"chat_start_url": "https://wiise.com/au/explore/detailed-accounting/?utm_source=googlewiise&utm_medium=paidsearch&utm_campaign=Wiise&gclid=EAIaIQobChMI3ZrLuqG14QIVBR2PCh0VIAb7EAAYASAAEgKkWPD_BwE",
"referrer": "https://www.google.com/",
"group": [
0
],
"started": "Thu, 04/04/19 12:25:43 pm",
"custom_variables": [],
"pending": false,
"tags": [],
"timezone": "Australia/Sydney",
"greeting": {
"id": 7991,
"name": "Invite after 360 seconds"
},
"messages": [
{
"author_name": "David",
"text": "Hi there :) \n\nThank you for checking out our website, how can I help?",
"message_json": "",
"date": "Thu, 04/04/19 12:25:43 pm",
"timestamp": 1554341143,
"agent_id": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4024213629246e33252e2425320037292933256e232f2d" rel="noreferrer noopener nofollow">[email protected]</a>",
"user_type": "agent",
"type": "message",
"welcome_message": true
},
{
"author_name": "Rupinder Kaur",
"text": "hi there",
"message_json": "",
"date": "Thu, 04/04/19 12:25:54 pm",
"timestamp": 1554341154,
"user_type": "visitor",
"type": "message"
},
{
"author_name": "Rupinder Kaur",
"text": "I would like to trial it",
"message_json": "",
"date": "Thu, 04/04/19 12:26:01 pm",
"timestamp": 1554341161,
"user_type": "visitor",
"type": "message"
},
{
"author_name": "Rupinder Kaur",
"text": "I am mainly looking for cashflow reports",
"message_json": "",
"date": "Thu, 04/04/19 12:26:25 pm",
"timestamp": 1554341185,
"user_type": "visitor",
"type": "message"
}
],
"prechat_survey": [
{
"key": "Name:",
"value": "xxxxxx",
"id": "2001"
},
{
"key": "E-mail:",
"value": "xxxxxx",
"id": "2002"
}
],
"events": [
{
"author_name": "David",
"text": "Hi there :) \n\nThank you for checking out our website, how can I help?",
"message_json": "",
"date": "Thu, 04/04/19 12:25:43 pm",
"timestamp": 1554341143,
"agent_id": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="771316011e135904121913120537001e1e04125914181a" rel="noreferrer noopener nofollow">[email protected]</a>",
"user_type": "agent",
"type": "message",
"welcome_message": true
},
{
"author_name": "XXXXXX",
"text": "XXXXXXXXXX",
"message_json": "",
"date": "Thu, 04/04/19 12:25:54 pm",
"timestamp": 1554341154,
"user_type": "visitor",
"type": "message"
},
{
"author_name": "XXXXXX",
"text": "XXXXXXXXXX",
"message_json": "",
"date": "Thu, 04/04/19 12:26:01 pm",
"timestamp": 1554341161,
"user_type": "visitor",
"type": "message"
},
{
"author_name": "XXXXXX",
"text": "XXXXXXXXXX",
"message_json": "",
"date": "Thu, 04/04/19 12:26:25 pm",
"timestamp": 1554341185,
"user_type": "visitor",
"type": "message"
},
{
"text": "Rupinder Kaur left the chat.",
"date": "Thu, 04/04/19 12:31:40 pm",
"timestamp": 1554341500,
"type": "event",
"event_type": "closed",
"user_type": "visitor"
}
],
"engagement": "auto_invite",
"started_timestamp": 1554341143,
"ended_timestamp": 1554341500,
"ended": "Thu, 04/04/19 12:31:40 pm"}

我尝试反序列化从 Postman 返回的内容,我得到了所有没有空字段的数据

//This works
var testJSON = System.IO.File.ReadAllText(@"C:\temp\ChatSchema.json");
Chat responseData = JsonConvert.DeserializeObject<Chat>(testJSON);

因此我怀疑 Content.ReadAsStringAsync 函数未按预期工作。

我尝试了以下方法,但仍然遇到同样的问题:

       var buffer = await response.Content.ReadAsByteArrayAsync();
var responseString = Encoding.UTF8.GetString(buffer, 0, buffer.Length);

string content = responseString;
Chat des = JsonConvert.DeserializeObject<Chat>(content);

最佳答案

读取原始文本,然后将其反序列化到模型类。我还必须更改序列化例程以另存为“UTF-8”。

您可以引用以下代码:

var stream = response.Content.ReadAsStreamAsync().Result;
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();

string content = text;
string des = JsonConvert.DeserializeObject<Chat>(content);

关于azure - response.Content.ReadAsStringAsync 不读取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55584000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com