【问题标题】:Get value from RestSharp response headers从 RestSharp 响应标头中获取值
【发布时间】:2014-04-28 10:22:00
【问题描述】:

我希望有人可以帮助解决我在使用 RestSharp 时遇到的问题。一切正常;我正在使用以下代码收到回复:

var client = new RestClient("http://mybaseuri.com");
var request = new RestRequest("service/{id}", Method.GET);
request.AddUrlSegment("id", id);
    
// execute the request
IRestResponse response = client.Execute(request);

我想从响应标头中获取一个值,如下所示:

string userId = response.Headers["userId"]

我在网上找不到任何示例,谁能帮助从response.Headers 类型为IList<parameter> 的对象中获取值?

我不打算迭代整个集合,只需按名称提取单个值。

【问题讨论】:

    标签: http-headers response restsharp


    【解决方案1】:

    当我想知道自己如何做同样的事情时,我在 MSDN article about IList<T> 的帮助下找到了以下解决方案:

    string userId = response.Headers.ToList()
        .Find(x => x.Name == "userId")
        .Value.ToString();
    

    我需要承认我喜欢在 Visual Studio 中使用 即时窗口快速观看挖掘一下,知道我正在处理什么样的元素类型:

    response.Headers[0]
    

    {userId=1024}

    名称:“用户 ID”

    类型:HttpHeader

    值:“1024”

    【讨论】:

    • 如果标头不存在怎么办?这会导致空引用异常。
    【解决方案2】:

    使用 LINQ:

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

    这不需要知道元素的索引,处理头部不存在的场景。

    【讨论】:

      【解决方案3】:

      使用 Linq 并不难:

      if( response.Headers.Any(t=>t.Headers == "Location"))
      {
          string location = 
          response.Headers.FirstOrDefault(t=>t.Headers == "Location").Value.ToString();
      }
      

      【讨论】:

        【解决方案4】:

        如果您知道“userId”的索引,那么您可以执行以下操作:

        string userId = response.Headers.ElementAt(indexOfUserId).Value.ToString();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-15
          • 2017-11-06
          • 1970-01-01
          • 2021-10-21
          • 2017-07-28
          • 2019-03-04
          相关资源
          最近更新 更多