How to dump ASP.NET Request headers to string

C#asp.netasp.net Mvc

C# Problem Overview


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
}

C# Solutions


Solution 1 - C#

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

Solution 2 - C#

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" 

Solution 3 - C#

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.

Solution 4 - C#

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()) 

Solution 5 - C#

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);

Solution 6 - C#

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

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPetrus TheronView Question on Stackoverflow
Solution 1 - C#Sani Singh HuttunenView Answer on Stackoverflow
Solution 2 - C#amelvinView Answer on Stackoverflow
Solution 3 - C#Bernardo Bosak de RezendeView Answer on Stackoverflow
Solution 4 - C#Rakesh ChaudhariView Answer on Stackoverflow
Solution 5 - C#JonoView Answer on Stackoverflow
Solution 6 - C#user2991288View Answer on Stackoverflow