C#如何循环遍历HttpRequestHeaders的所有标头

5

我希望能够循环遍历HttpRequestMessageHttpRequestHeaders中的所有标题。

我正在将我的代码从HttpWebRequest迁移到HttpClient。 使用HttpWebRequest时,我使用以下代码来循环遍历其WebHeaderCollection

StringBuilder headers_ = new StringBuilder();
foreach (string key in headers.AllKeys)
{
    headers_.Append(key).Append(':').Append(headers[key]).Append(' ');
}
headers_.Length--;

但是 HttpRequestHeaders 没有 AllKeys 方法。 它只有 GetValues(string name) 方法,该方法仅检索一个指定的标头。
HttpRequestMessage requestMessage = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://postman-echo.com/post"),
    Headers = {
        { "header1", "aa" },
        { "header2", "bb" },
    },
    Content = new StringContent("hi=aa")
}

我该如何通过编程从requestMessage中检索{ "header1", "aa" },{ "header2", "bb" }对呢?

你不能使用 entries 方法吗? - R Kaja Mohideen
条目不存在 https://learn.microsoft.com/zh-cn/previous-versions/visualstudio/hh193710(v%3Dvs.118) - LukAss741
哦,我忘了明确说明它是C#。抱歉。 - LukAss741
2个回答

11

好的,这比我预想中要简单。

foreach (var header in httpRequestMessage.Headers)
{
    string headerName = header.Key;
    string headerContent = string.Join(",", header.Value.ToArray());
}

1
作为HttpRequestHeaders类的属性,标头需要使用反射来枚举。下面是一个代码片段,用于枚举标头。
var headers = new HttpClient().DefaultRequestHeaders;

PropertyInfo[] properties = headers.GetType().GetProperties();
foreach (var property in properties)
      Console.WriteLine(property.Name);

谢谢您的回答,但是这会返回大约30个默认标头。我想循环遍历我的HttpRequestMessage标头。我将在我的问题中更新更具体的代码。 - LukAss741

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接