报错无法发送具有此谓词类型的内容正文

问题描述

在使用低版本的net时(4.8),我在使用httpclient出现了这个问题,
代码如下:

 private async Task GetSite2()
        {
            Sites.Add(new Site() { Name = "678", Id = 12, Longitude = 200, Color = "green" });
            using (HttpClient client = new HttpClient())
            {
                Console.WriteLine("shixian");
                Sites.Add(new Site() { Name = "678", Id = 12, Longitude = 210, Color = "white" });
                // 构造请求数据
                LoginRequestData requestData = new LoginRequestData
                {
                    userid = App.user.Name,
                    password = App.user.PassWord,
                    token = App.user.Token,

                };
                //   options.Headers.Add("Authorization", "Bearer token");

                // 将请求数据序列化为JSON字符串
                string jsonRequestData = JsonConvert.SerializeObject(requestData);
                Console.WriteLine(jsonRequestData);

                // 构造HTTP请求
                HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "http://10.168.1.33:5003/Home/site");
                Console.WriteLine(request);
                //request.Content = new StringContent(jsonRequestData, Encoding.UTF8, "application/json");
                request.Headers.Add("Authorization", "Bearer" + requestData.token);

                try
                {
                    // 发送HTTP请求

                    HttpResponseMessage response = await client.SendAsync(request);

                    // 读取响应内容
                    string jsonResponseData = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(jsonResponseData);
                    JArray jsonArray = JArray.Parse(jsonResponseData);
                    Console.WriteLine(jsonArray);

                    // 将响应内容反序列化为响应数据模型
                    //dynamic data = JObject.Parse(jsonResponseData);

                    //   string  groupId = jsonResponseData["groupId"];
                    //string deviceInfos = jsonResponseData["deviceInfos"];
                    foreach (JObject obj in jsonArray)
                    {

                        
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    // 释放HttpClient实例
                    client.Dispose();
                }




            }

        }

然后出错,并且出错位置在 HttpResponseMessage response = await client.SendAsync(request);这一行

分析

这端代码在我之前的另一个项目中是能使用的
但是在这个项目中,什么都没有改就使用不了了
起初我比对了两个项目的框架以及引入的包
在引入一些乱七八遭的包之后又看了之前项目的using,看看是不是引入了其他的东西

最终原因:
低版本的net不能使用添加了请求体的httpclient的get方法,但是后端接口只能在接受了token等数据之后才能正常返回数据
但是我的ui有的不能在高版本的framework下使用

解决

代码修改如下


        private void GetSites()
        {
            string url = "http://10.168.1.33:5003/Home/site";

            try
            {
                // 创建请求
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = "GET";

                // 添加请求头
                request.Headers.Add("Authorization", "Bearer " + App.user.Token);

                // 发送请求并获取响应
                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    // 读取响应流
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        string jsonResponseData = reader.ReadToEnd();
                        Console.WriteLine(jsonResponseData);

                        JArray jsonArray = JArray.Parse(jsonResponseData);
                        Console.WriteLine(jsonArray);

                        foreach (JObject obj in jsonArray)
                        {
                            int id = (int)obj["id"];
                            string name = (string)obj["name"];
                            string address = (string)obj["address"];
                            double longitude = (double)obj["longitude"];
                            double latitude = (double)obj["latitude"];
                            int workState = (int)obj["workState"];

                            string state = GetColor(workState);
                            double lo = Longindex(longitude);
                            double la = Latitude(latitude);
                            Console.WriteLine(name);
                            Sites.Add(new Site() { Name = name, Id = id, Longitude = lo, Latitude = la, Color = state, Address = address, WorkState = workState });
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex);
            }
        }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值