C# HTTPClient 不发送请求

Posted

技术标签:

【中文标题】C# HTTPClient 不发送请求【英文标题】:C# HTTPClient Not Sending Request 【发布时间】:2021-06-04 14:32:06 【问题描述】:

我有一个 WPF 应用程序,我需要从远程 API 检索配置数据。 API 已经过测试并且可以正常工作,返回我认为正确的格式。我已经为响应等创建了一个数据类型,但是当我到达通过 HttpClient 获取响应的行时,它不会向 API 发送任何请求。

数据类型:-

public class Mylist
    
        public string ItemName  get; set; 
        public string ItemText  get; set; 
        public string ConfigName  get; set; 
        public string ConfigValue  get; set; 
        public string ConfigType  get; set; 
    

代码:-

string licKey = ConfigManager.GetSetting("Lic");
            string Uri = ConfigManager.GetSetting("API");
            string UserAPI = ConfigManager.GetSetting("Config");

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

            var response = await client.GetAsync(UserAPI + "?Licence=" + licKey);
            var data = await response.Content.ReadAsAsync<IEnumerable<Mylist>>();
            int count = 0;
            List<Mylist> nudges = new List<Mylist>((IEnumerable<Nudgelist>)data);
// Do something with the data

代码为请求构建正确的 URL (https://example.com/api/Uri?Licence=licencevalue),如果手动输入到浏览器中,它会根据以下给出响应:-

<Mylist>
<ConfigName>cName</ConfigName>
<ConfigType>cType</ConfigType>
<ConfigValue>cValue</ConfigValue>
<ItemName>iName</NudgeName>
<ItemText>iText</NudgeText>
</Mylist>
<Mylist>
...
</Mylist>

当我运行上面的代码并单步执行时,我们会看到“var response = await client.GetAsync(UserAPI + "?Licence=" + licKey);" 这一行它只是跳过其余代码并进入下一个调用,不会引发错误或发现任何故障。

我已经在 API 上运行了日志,但我们没有看到请求进入,如果我们使用相同模型的代码来调用另一个 API 控制器来调用 Uri2 (https://example.com/api/Uri2?Licence=licencevalue),它可以正常工作。

【问题讨论】:

你不检查响应上的状态码,如何确定没有失败? 能否请您发布您从配置中获得的 Uri 和 UserApi。 【参考方案1】:

试试这个


if (response.IsSuccessStatusCode)

    var stringData = await response.Content.ReadAsStringAsync();
    var result = JsonConvert.DeserializeObject<IEnumerable<MyList>>(stringData);

else 

    var statusCode= response.StatusCode);

【讨论】:

谢谢,由于某种原因,现在正在向 API 发出请求并正常运行。

以上是关于C# HTTPClient 不发送请求的主要内容,如果未能解决你的问题,请参考以下文章

C# HttpClient 不发送 POST 变量

使用 HttpClient 和 C# 在 post 请求中发送 json

C# HttpClient:如何在 POST 请求中发送查询字符串

C# HttpClient.SendAsync 在测试某些 URL 时抛出“发送请求时发生错误”异常

无法使用 C# HttpClient 获取任何 cookie

c#:如何使用 httpclient 发布异步请求并获取流?