如何将ASP.NET请求标头转储到字符串

时间:2010-04-13 09:58:21

标签: c# asp.net asp.net-mvc

我想通过电子邮件快速转发GET请求的标头以进行调试。我以前只能使用Request对象在经典ASP中执行此操作,但Request.ToString()不起作用。以下代码返回一个空字符串:

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

5 个答案:

答案 0 :(得分:101)

查看Request对象中的Headers属性。

<强> C#

string headers = Request.Headers.ToString();

或者,如果您希望以其他方式格式化:

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

或者:

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

答案 1 :(得分:28)

您可以在页面上启用跟踪,以便轻松查看标题,Cookie,表单变量,查询字符串等:

aspx开头的第一行:

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

答案 2 :(得分:3)

对于那些(像我一样)在 AllKeys 实现中缺少 IHeaderDictionary 属性有问题的人,这是我能够序列化字符串中的所有标头(在控制器操作中)的方式。

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

我使用的是 ASP.NET Core 3.1。

答案 3 :(得分:0)

您可以使用

string headers = Request.Headers.ToString(); 

但是它将返回URL编码的字符串,以便使用以下代码对其进行解码,

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

答案 4 :(得分:0)

使用此(VB.Net),您可以一次性获得所有标头为string()

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