public WorkItem CreateWorkItem(string title, string description, string comments)
{
HttpClient client = new HttpClient();
//var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null).Result.Content;
//var task = await client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title=" + title + "&description=" + description + "&history=" + comments, null);
var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title=" +title+"&description="+description+"&history="+ comments, null).Result;
var result = response.Content.ReadAsStringAsync().Result;
var workItem = JsonConvert.DeserializeObject<WorkItem>(result);
return workItem;
}
使用“内容”时我也会收到错误任务不包含“内容”的定义,并且没有扩展方法“内容”接受“内容”任务类型的第一个参数可以找到
目标是使用ajax命中此方法以触发api调用并使用数据填充我的WorkItem并在调用完成后读取该响应。
public class WorkItem
{
public string title { get; set; }
public string description { get; set; }
public string status { get; set; }
public string comments { get; set; }
}
答案 0 :(得分:1)
您发现它是“发布异步”,这意味着它会返回Task<HttpWebResponse>
,因此您必须await
它或阻止它直到您获得结果(.Result
)
var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null).Result;
或
var response = await client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null);
然后使用NewstonSoft.Json
var workItem = JsonConvert.Deserialize<WorkItem>(contents);
答案 1 :(得分:0)
Use shared runtime
是一个异步方法,它只返回任务而不是结果。如果要获得结果,则需要等待API的响应。 使用
client.PostAsync()
这是我们访问数据的方式。但要实现这一点,您的方法应标记为“异步”,然后只有您可以使用'await'关键字。另一种方法是,
var response = await client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem?title="+title+"&description="+description+"&history="+comments, null)
var workItem = JsonConvert.Deserialize<WorkItem>(response.Content);
但是在等待方法上使用结果并不是一个好习惯。因为我们无法利用该特征的异步性。
否则,
var response = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem").Result.Content
var workItem = JsonConvert.Deserialize<WorkItem>(response);
这也不是一个好方法。如果您不使用“异步”功能,这些都是您的选择。
var task = client.PostAsync("http://localhost:57765/API.svc/CreateWorkItem");
task.wait();
var workItem = JsonConvert.Deserialize<WorkItem>(task.Result.Content);