Sytem.Net.Http.HttpClient 在 .net core 和 .net framework 中的工作方式不同

Sytem.Net.Http.HttpClient works differently in .net core and .net framework

提问人:Waseem Ishaq 提问时间:8/23/2023 最后编辑:Waseem Ishaq 更新时间:8/23/2023 访问量:36

问:

我构建了两个 API 的工作方式相同,一个在 .net 中,另一个在 .net core 中。

我还有另一个 .net 核心项目,我在其中一一使用这些 api。有趣的是,.net 项目工作正常,但在 .net core 中,它在“显示”时出现异常。Wait();“。

例外:

“System.AggregateException:'发生一个或多个错误。(无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“ConsumeApi.Models.Employee”,因为该类型需要 JSON 对象(例如 {“name”:“value”})才能正确反序列化。 若要修复此错误,请将 JSON 更改为 JSON 对象(例如 {“name”:“value”}),或者将反序列化类型更改为数组或实现集合接口的类型(例如 ICollection、IList),例如可以从 JSON 数组反序列化的 List。还可以将 JsonArrayAttribute 添加到类型中,以强制它从 JSON 数组反序列化。 路径 '',第 1 行,位置 1。

下面是我使用 API 的 .net core 项目的 ClientLogic 文件。

using ConsumeApi.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System.Net;
namespace ConsumeApi.Client
{


    public class CL
    {

        List<Employee> list = new List<Employee>();
        HttpClient client = new HttpClient();

        string ApiUrl = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build().GetSection("ApiUrl")["Url"];

        [HttpGet]
        public List<Employee> GAE()
        {
            List<Employee> list = new List<Employee>();
            client.BaseAddress = new Uri(ApiUrl);
            var response = client.GetAsync("values");
            response.Wait();

            var test = response.Result;
            if (test.IsSuccessStatusCode)
            {
                var display = test.Content.ReadAsAsync<List<Employee>>();
                display.Wait();
                list = display.Result;
            }
            return list;
        }

        [HttpPost]
        public bool AE(Employee emp)
        {
            client.BaseAddress = new Uri(ApiUrl);
            var response = client.PostAsJsonAsync<Employee>("values", emp);
            response.Wait();

            var test = response.Result;
            return (test.IsSuccessStatusCode);
        }

        [HttpGet]
        public Employee GE(int id)
        {
            Employee e = null;
            client.BaseAddress = new Uri(ApiUrl);
            var response = client.GetAsync("values?id=" + id.ToString());
            response.Wait();

            var test = response.Result;
            if (test.IsSuccessStatusCode)
            {
                var display = test.Content.ReadAsAsync<Employee>();
                display.Wait();
                e = display.Result;
            }
            return (e);
        }

        [HttpPost]
        public bool UE(int id, Employee emp)
        {
            client.BaseAddress = new Uri(ApiUrl);
            var response = client.PutAsJsonAsync<Employee>("values?id=" + id.ToString(), emp);
            response.Wait();

            var test = response.Result;
            return (test.IsSuccessStatusCode);
        }

        [HttpPost, ActionName("Delete")]
        public bool DE(int id)
        {
            client.BaseAddress = new Uri(ApiUrl);
            var response = client.DeleteAsync("values/" + id.ToString());
            response.Wait();

            var test = response.Result;
            return (test.IsSuccessStatusCode);
        }
    }
}

我在 .net Core 中得到的结果

我在 .net 中得到的结果

asp.net asp.net-mvc asp.net-core asp.net-web-api

评论

0赞 Mark Seemann 8/24/2023
请不要上传代码/数据/错误的图像。
0赞 Mark Seemann 8/24/2023
那里有相当多的代码。请将其简化为一个最小的、可重现的示例
0赞 Mark Seemann 8/24/2023
所有问题都得到解决后,请随时联系我。

答: 暂无答案