c#API调用在没有响应的情况下结束.结果声明



下面是我们用来进行API调用的泛型类。我有几个电话需要">var notSureWhyWeNeedThisButWeDo=响应。结果";下面让它工作,其他电话根本不需要它。有人能解释为什么需要这样做吗?必须有更好的编码方法吗?

public class APICallClass
{
private static HttpClient client = new HttpClient();
public static async Task<HttpResponseMessage> APICall(AccessTokenObject root, string json, string paCode, string url, string type)
{
try {
var data = new StringContent(json, Encoding.UTF8, "application/json");
data.Headers.Add("securityToken", root.access_token);
if (paCode.Length > 0) {
data.Headers.Add("X-POS-MerchantID", paCode);
}
Task<HttpResponseMessage> response;
switch (type) {
case "put":
response = client.PutAsync(url, data);
break;
case "post":
response = client.PostAsync(url, data);
break;
default:
response = client.PostAsync(url, data);
break;
}
var notSureWhyWeNeedThisButWeDo = response.Result;
return await response.ConfigureAwait(false);
} catch (Exception ex) {
Logging.WriteErrorMessage(Priority.High, string.Empty, "APICall",  "APICall.cs",url, ex, "client.xxxxAsync", false);
return null;
}
}
}

我用这样的声明来打电话:

var response = await TalechAPI.APICall(root, json, pa.storeId, "https://mapi.talech.com/managemenu/menuitem/allmenuitems", "post");

通话后,我们会这样做:

using (HttpContent content = response.Content)
{
var result = await response.Content.ReadAsStringAsync();
AddMenuItem.AddMenuItemRoot hd = JToken.Parse(result).ToObject<AddMenuItem.AddMenuItemRoot>();
if ((int) response.StatusCode != 200) {
Logging.WriteErrorMessage(Priority.High, string.Empty, "Talech", "Items.cs", "RootInsertItem", response.StatusCode.ToString(), "TalechBatchUser", false);
return null;
}

在您的示例中,我认为您正在获取awaiter并对其进行配置,但这并不等待执行(您等待configure等待响应(。您为读取结果而进行的调用是强制调用同步的原因,因为结果在完成之后才可用。

switch (type) {
case "put":
return await client.PutAsync(url, data);                   
case "post":
return await client.PostAsync(url, data);
default:
return await client.PostAsync(url, data);
}

是完成响应后返回响应所需的全部内容。

相关内容

最新更新