问题描述
在使用低版本的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);
}
}