如何正确使用包装为 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()
如果您向我们展示的不是您的实际代码,那么就答案而言,所有赌注都将落空。
在我的 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()
如果您向我们展示的不是您的实际代码,那么就答案而言,所有赌注都将落空。