【问题标题】:How get the response header with RESTSharp?如何使用 RESTSharp 获取响应标头?
【发布时间】:2020-07-04 21:45:16
【问题描述】:

我正在开发一个调用 API 的程序,一切正常,但我必须恢复响应头上的一些信息,我该如何恢复这些信息?

我尝试过类似的方法:string h = response.Headers; 但它不起作用。

 var client = new RestClient("https://xxxx.com/");

        client.Authenticator = new HttpBasicAuthenticator("user", "password");


        var request = new RestRequest("xx/xx/xx", Method.GET);
        IRestResponse response = client.Execute(request);
        var xml_text = response.Content;

【问题讨论】:

  • 我已经准备好看到这篇文章但它对我没有帮助!
  • @ALDZAFE 您试图在代码中的哪个位置访问标头?此外,该示例中的过程清楚地说明了如何获取标题列表并按名称搜索特定标题。

标签: c# api restsharp


【解决方案1】:

我很确定 RestSharp 中的响应标头作为集合 (IList) 返回,因此将 h 声明为字符串是行不通的。请参阅来源here。您可能想尝试将值转换为这样的字符串:

foreach (var h in response.Headers)
{
  h.ToString();
}

如果您知道要查找的标头的名称,则可以使用一些 LINQ,如 here 所示:

string userId = response.Headers
    .Where(x => x.Name == "userId")
    .Select(x => x.Value)
    .FirstOrDefault().ToString();

【讨论】:

  • 感谢您的回答!我尝试了response.Headers.ToString();,结果是System.Collections.Generic.List 1[RestSharp.Parameter],这不是我执行的。我不知道标题的名称...
  • 因为标头作为集合返回,您可能必须执行foreach 才能获取标头中的值。我更新了答案。
  • 完美,谢谢。我用一个简单的 IF...THEN 避免了 LINQ。在外面声明变量,然后 'if (h.ToString().StartsWith("userId") ) { USERId = h.ToString(); }'
  • @Edward 为什么要避免使用 LINQ 表达式呢?它更干净、更简洁,并且不会用可能无用的变量污染范围。
猜你喜欢
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2016-09-21
  • 2013-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多