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

Pet*_*ron 49 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
}
Run Code Online (Sandbox Code Playgroud)

San*_*nen 108

查看Request对象中的Headers属性.

C#

string headers = Request.Headers.ToString();
Run Code Online (Sandbox Code Playgroud)

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

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

VB.NET:

Dim headers = Request.Headers.ToString()
Run Code Online (Sandbox Code Playgroud)

要么:

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

  • 您可以使用string.Join方法连接所有数据:string.Join(Environment.NewLine,Request.Headers.AllKeys.Select(key => string.Format("Key:{0},Value:{1}",key, Request.Headers [键]))); 这个方法比你的因为string更快.加入连接几个对象更有效 (3认同)
  • 在 ASP.NET Core 3.1 中,“Request.Headers.ToString()”返回数据类型名称“Microsoft.AspNetCore.HttpSys.Internal.RequestHeaders”,并且“Request.Headers”没有“AllKeys”成员。 (3认同)

ame*_*vin 28

您可以打开页面上的跟踪,无痛地查看标题,cookie,表单变量,查询字符串等:

aspx的顶线开始:

<%@ Page Language="C#" Trace="true" 
Run Code Online (Sandbox Code Playgroud)

  • 跟踪不适用于此配置:`<deployment retail = true />`通常用于machine.config中的生产Web服务器,您可以从此处阅读有关配置值继承的更多信息http://msdn.microsoft.com/en-us /library/ms178685.aspx (4认同)

Ber*_*nde 5

对于那些在实现中缺少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();
Run Code Online (Sandbox Code Playgroud)

我正在使用 ASP.NET Core 3.1。