Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将ASP.NET请求头转储到字符串_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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

C# 如何将ASP.NET请求头转储到字符串,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我想给自己发一封电子邮件,快速转储GET请求的标题,以便进行调试。我曾经能够在经典ASP中简单地使用Request对象实现这一点,但Request.ToString不起作用。下面的代码返回了一个空字符串: using (StreamReader reader = new StreamReader(Request.InputStream)) { string requestHeaders = reader.ReadToEnd(); // ... // send reques

我想给自己发一封电子邮件,快速转储GET请求的标题,以便进行调试。我曾经能够在经典ASP中简单地使用Request对象实现这一点,但Request.ToString不起作用。下面的代码返回了一个空字符串:

using (StreamReader reader = new StreamReader(Request.InputStream))
{
    string requestHeaders = reader.ReadToEnd();
    // ...
    // send requestHeaders here
}
查看请求对象中的属性

C

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

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

或:


您可以在页面上打开跟踪,轻松查看标题、cookie、表单变量、查询字符串等:

aspx的顶行开始:

<%@ Page Language="C#" Trace="true" 
你可以用

string headers = Request.Headers.ToString(); 
但它会返回URL编码的字符串,所以要解码它,请使用下面的代码

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

使用此VB.Net,您可以一次将所有标题作为字符串获取

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

对于像我这样在IHeaderDictionary实现中缺少AllKeys属性的人来说,这是我能够在控制器操作中序列化字符串中所有头的方式

使用制度; 使用系统文本; // ... var builder=new StringBuilderEnvironment.NewLine; Request.Headers中的foreach var头 { AppendLine${header.Key}:{header.Value}; } var headersDump=builder.ToString;
我使用的是ASP.NET Core 3.1。

+1只需在电子邮件中添加一行,我想这就是完整的答案。问题被标记为C,因此我认为VB.NET版本不是必需的。第一个KeyValuePair片段导致运行时强制转换错误,所以我在请求中使用foreach字符串键。Headers header+=key+=+Request.Headers[key]+Environment.NewLine;您可以使用string.JoinEnvironment.NewLine,Request.Headers.AllKeys.Selectkey=>string.FormatKey:{0},Value:{1},key,Request.Headers[key];此方法比您的string.Join更快,因为它能更有效地连接多个对象。对于AspNetCore,由于Kestrel的缘故,标头被包装,并且密钥的前缀为“Header”,因此您需要迭代标头字典,然后转储键值对,可能会删除“Header”一词。这也适用于请求上的表单对象,只是fyiTrace不适用于此配置:通常用于machine.config中的生产web服务器。您可以从此处了解有关配置值继承的更多信息
string headers = Request.Headers.ToString(); 
String headers = HttpUtility.UrlDecode(Request.Headers.ToString()) 
Request.Headers.ToString.Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries)