我正在尝试从服务中读取响应XML以使用它。
如果我使用此网址https://btsvcs.college.edu/HR/Employee/ID/NAGWA_N@COLLEGE.EDU
响应XML将如下所示:
<Data>
<Record id="PA01051" rowOrder="0">
<employee_id>20000343</employee_id>
</Record>
</Data>
我创建了我的类与响应XML相同。
这是班级:
public class GetEmployeeIdByEmail
{
[DataContract(Namespace = "")]
public class Record
{
[DataMember(Order = 0)]
public string employee_id { get; set; }
}
[DataContract(Namespace = "")]
public class Data
{
[DataMember(Order = 0)]
public Record Record { get; set; }
}
}
之后我创建了一个使用HttpClient
这是功能:
public async Task<GetEmployeeIdByEmail> GetEmployeeIdByEmail()
{
var client = new HttpClient();
var url = "https://btsvcs.college.edu/HR/Employee/ID/NAGWA_N@COLLEGE.EDU";
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));
var responseMessage = await client.GetAsync(url);
GetEmployeeIdByEmail responseData = null;
if (responseMessage.IsSuccessStatusCode)
{
responseData = await responseMessage.Content.ReadAsAsync<GetEmployeeIdByEmail>();
}
return responseData;
}
如果我在此功能上设置断点并逐步跟踪它,请务必返回网站,以便在此行之后读取xml
var responseMessage = await client.GetAsync(url);
并且没有回复以完成调试。
我不知道是什么原因。
答案 0 :(得分:1)
HttpResponseMessage responseMessage;
try
{
responseMessage = await client.GetAsync(url);
}
catch (Exception ex)
{
throw ex;
}
答案 1 :(得分:0)
这里的原因是client.GetAsync
是异步方法,它使async I/O
能够联网以执行请求并接收响应。当发生此类异步操作并且在方法调用之前存在await
关键字时,控件将由堆栈返回到方法的调用方。当客户端获得响应方法时,它会从它离开的位置恢复。
尝试在await
之后的下一行设置断点,并在执行请求后点击。
答案 2 :(得分:0)
@ivw回答使用此link
这有助于我使用问题中编写的代码。
responseMessage = client.GetAsync(url).Result;
而不是
responseMessage = await client.GetAsync(url);
并从函数头
中删除异步