从响应中获取位置标头,httpclient

时间:2018-07-31 06:31:47

标签: c# rest api httpclient

我有当前代码向REST API发出POST请求:

string url = "https://xxxx.azurewebsites.net/api/walk/";
string sContentType = "application/json";

JObject jsonObject = new JObject();
jsonObject.Add("Duration", walkInfo.Duration);
jsonObject.Add("WalkDate", walkInfo.WalkDate);


HttpClient oHttpClient = new HttpClient();
var oTaskPostAsync = oHttpClient.PostAsync(url, new StringContent(jsonObject.ToString(), Encoding.UTF8, sContentType));

而且效果很好,我遇到的问题是我无法弄清楚如何从API的响应中获取Location标头。当我通过邮递员进行测试时,我可以看到位置标头已设置为 Location→http://xxx/api/walk/5 ,因此在执行PostAsync之后,我需要获取此Location值。

1 个答案:

答案 0 :(得分:2)

正如我在文档中看到的那样,您需要访问变量“ oTaskPostAsync”中包含的结果。

因此,要获取位置,您应该执行以下操作:

string url = "https://xxxx.azurewebsites.net/api/walk/";
string sContentType = "application/json";

JObject jsonObject = new JObject();
jsonObject.Add("Duration", walkInfo.Duration);
jsonObject.Add("WalkDate", walkInfo.WalkDate);


HttpClient oHttpClient = new HttpClient();
var oTaskPostAsync = oHttpClient.PostAsync(url, new StringContent(jsonObject.ToString(), Encoding.UTF8, sContentType));
var location = oTaskPostAsync.Headers.Location;

位置应返回Uri对象。

注意:您在这里必须小心,因为您正在进行异步调用,因此必须考虑到服务器响应之前可能没有该值,所以您可能应该使用“等待”进行同步。