在我的C#应用程序中,我需要有两个不同的部分:
1)包装HttpClient的类库,将URI和JSON对象等参数作为POSTED,并在HttpClient的实例上调用POST方法:
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控制台应用程序,它导入此类库,并调用此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相同的问题。
是否有一种经过验证的方法可以创建这样的类库,可以通过控制台应用程序调用它?
答案 0 :(得分:1)
您没有等待方法调用:
await restClient.CreateCustomer(URI, customer);
根据应用程序主机的不同,这可能会或可能不会产生明显的差异。在控制台应用程序中,应用程序可以简单地执行其操作并立即终止,这会产生巨大的差异。
更不用说如果不等待通话,过程中收到的任何错误都可能完全被忽视。所以可能存在问题并且它试图告诉你问题是什么,但你的代码却忽略了它。
当然有编制警告指出这一点。永远不要忽略编译器警告。
旁注:这段代码甚至可以编译?这样:
restClient.CreateCustomer(URI, customer);
不能称之为:
static async Task CreateCustomer()
如果您向我们展示的内容不是您的实际代码,那么就答案而言,所有投注都会被取消。