我有当前代码向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值。
答案 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对象。
注意:您在这里必须小心,因为您正在进行异步调用,因此必须考虑到服务器响应之前可能没有该值,所以您可能应该使用“等待”进行同步。