How to dump ASP.NET Request headers to string

I’d like to email myself a quick dump of a GET request’s headers for debugging. I used to be able to do this in classic ASP simply with the Request object, but Request.ToString() doesn’t work. And the following code returned an empty string:

using (StreamReader reader = new StreamReader(Request.InputStream))
{
    string requestHeaders = reader.ReadToEnd();
    // ...
    // send requestHeaders here
}

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Have a look at the Headers property in the Request object.

C#

string headers = Request.Headers.ToString();

Or, if you want it formatted in some other way:

string headers = String.Empty;
foreach (var key in Request.Headers.AllKeys)
  headers += key + "=" + Request.Headers[key] + Environment.NewLine;

VB.NET:

Dim headers = Request.Headers.ToString()

Or:

Dim headers As String = String.Empty
For Each key In Request.Headers.AllKeys
  headers &= key & "=" & Request.Headers(key) & Environment.NewLine
Next

Method 2

You could turn on tracing on the page to see headers, cookies, form variables, querystring etc painlessly:

Top line of the aspx starting:

<%@ Page Language="C#" Trace="true"

Method 3

For those (like me) having troubles with the absence of AllKeys property in IHeaderDictionary implementation, this is the way I was able to serialize all headers in a string (inside a controller action).

using System;
using System.Text;

// ...

var builder = new StringBuilder(Environment.NewLine);
foreach (var header in Request.Headers)
{
    builder.AppendLine($"{header.Key}: {header.Value}");
}
var headersDump = builder.ToString();

I’m using ASP.NET Core 3.1.

Method 4

You can use,

string headers = Request.Headers.ToString();

But It will return URL encoded string so to decode it use below code,

String headers = HttpUtility.UrlDecode(Request.Headers.ToString())

Method 5

asp.net core spits out Microsoft.AspNetCore.HttpSys.Internal.RequestHeaders
for Request.Headers.ToString(), so the solution in that context is:

IEnumerable<string> keyValues = context.Request.Headers.Keys.Select(key => key + ": " + string.Join(",", context.Request.Headers[key]));
string requestHeaders = string.Join(System.Environment.NewLine, keyValues);

Method 6

You can get all headers as string() in one shot, using this (VB.Net)

Request.Headers.ToString.Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries)


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x