如何正确使用包装为 Class 库的 HttpClient

how to properly use HttpClient wrapped as a Class Libary

在我的 C# 应用程序中,我需要有 2 个不同的部分:
1)一个Class库,它包装了HttpClient,接受参数,比如URI,一个JSON对象是POSTED,并在一个实例上调用POST方法HttpClient 的:

static async Task CreateCustomer()
        {
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://10.211.55.2:8080/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("Accept", "application/json");

                var customer = new Customer() { Name = "Gizmo",  Address = "123 Widget lane" };
                var response = await client.PostAsJsonAsync("/api/customer", customer);
                var p = response;
            }
        }

2) 一个 Windows 控制台应用程序,它导入这个 Class 库,并调用这个 CreateCustomer 方法,传递 URI 和 Customer JSON 对象的实际参数值:

static async Task EnvokeCreateCustomer()
        {
            Customer customer = new Customer {Name="",Address="" };
            var URI = "http://my_api:8080/Customer";
            RestClient.Client restClient = new RestClient.Client();
            restClient.CreateCustomer(URI, customer);
        }

此代码运行,但它不是事件命中我的 API,右击通过它,但什么都不做。 GET API.

同样的问题

是否有一种行之有效的方法来创建这样的 Class 库,可以由控制台应用程序调用?

您没有等待方法调用:

await restClient.CreateCustomer(URI, customer);

根据应用程序主机的不同,这可能会或不会产生 明显的 差异。在 控制台应用程序 中,应用程序可以简单地执行它的操作并立即终止,这会产生巨大的差异。

更不用说如果不等待调用,过程中收到的任何错误都可能完全被忽视。所以 可能 有问题,它试图告诉你问题是什么,但你的代码只是忽略了它。

肯定有编译器警告指出这一点。永远不要忽略编译器警告。


旁注:这段代码是如何编译的?这个:

restClient.CreateCustomer(URI, customer);

不能这样称呼:

static async Task CreateCustomer()

如果您向我们展示的不是您的实际代码,那么就答案而言,所有赌注都将落空。