【问题标题】:Get location header from response, httpclient从响应中获取位置标头,httpclient
【发布时间】:2018-07-31 06:31:46
【问题描述】:

我有当前代码向 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 值。

【问题讨论】:

    标签: c# rest api httpclient


    【解决方案1】:

    正如我在文档中看到的,您需要访问包含在变量“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;
    

    Location 应该返回一个 Uri 对象。

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

    【讨论】:

    • 我会将所有async/await 部分转换为粗体。或整个注释。也可以写成var location = oTaskPostAsync.Headers.GetValues("Location").FirstOrDefault()
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2020-01-02
    • 2018-01-26
    • 2018-01-12
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多