从.NET客户端调用Web API(C#)

时间:2017-04-18 12:04:42

标签: c# .net xml asp.net-mvc asp.net-web-api

我正在尝试从服务中读取响应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

读取XML的函数

这是功能:

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);并且没有回复以完成调试。

我不知道是什么原因。

3 个答案:

答案 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);

并从函数头

中删除异步