【问题标题】:Removing a header from RestSharp RestRequest从 RestSharp RestRequest 中删除标头
【发布时间】:2020-02-05 14:15:12
【问题描述】:

有什么方法可以从 RestSharp RestRequest 中删除标头?

我在项目页面中偶然发现了这个问题,但看不到它曾经被应用过:

https://github.com/restsharp/RestSharp/issues/959

有一个使用 request.Parameters.remove() 的建议,假设将标头名称作为参数,但我不明白这应该如何对应于删除标头。

我可能只是困惑,有人可以帮忙吗?

【问题讨论】:

    标签: restsharp


    【解决方案1】:

    RestRequestParameters 属性命名不当。它应该被称为Headers,因为仅此而已;请求标头的List。因此,要从请求中移除一个或多个header,必须先在列表中找到header,然后使用List.Remove()方法将其移除。

    例如,这个 sn-p 从请求中删除每个 Authorization 标头。在添加新令牌之前,我使用它从请求中删除旧的和过期的身份验证令牌。

    foreach (var oldAuthHeader in request.Parameters.Where(p => p.Name.Equals("Authorization", StringComparison.OrdinalIgnoreCase)).ToArray())
    {
        request.Parameters.Remove(oldAuthHeader);
    }
    

    【讨论】:

    • 对。这是一个名字不好的 kvps 列表。
    • Parameters 属性不仅仅是标题。也可以是 UrlSegment、QueryString、Cookie 等。检查枚举 RestSharp.ParameterType。
    • @YanF。你说的是这些吗? restsharp.org/usage/parameters.html
    【解决方案2】:

    更快地实现 Nathan 的响应。

    var authParam = requestHeadersAdded.Parameters.Find(p => p.Name == "Authorization");
    requestHeadersAdded.Parameters.Remove(authParam);
    

    而不是包装 LINQ .Where 在 foreach 循环中,这只循环一次。

    【讨论】:

    • 仅供参考,foreach 循环的表达式只计算一次,因此您可以使用 LINQ 表达式,它只会循环一次。此外,您应该避免使用== 进行字符串比较,而是应该明确声明要使用的StringComparison
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2019-02-22
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多