ASP.Net Core 2.0 如何获取中间件中的所有请求标头? [复制]
Posted
技术标签:
【中文标题】ASP.Net Core 2.0 如何获取中间件中的所有请求标头? [复制]【英文标题】:ASP.Net Core 2.0 How to get all request headers in middleware? [duplicate] 【发布时间】:2018-08-24 18:06:34 【问题描述】:在 ASP.Net Core 2.0 中,我尝试在自定义中间件中验证传入的请求标头。
问题是我不知道如何提取所有键值对标头。我需要的标头存储在受保护的属性中
protected Dictionary<string, stringValues> MaybeUnknown
到目前为止,我的中间件类看起来像这样:
public class HeaderValidation
private readonly RequestDelegate _next;
public HeaderValidation(RequestDelegate next)
_next = next;
public async Task Invoke(HttpContext httpContext)
IHeaderDictionary headers = httpContext.Request.Headers; // at runtime headers are of type FrameRequestHeaders
// How to get the key-value-pair headers?
// "protected Dictionary<string, stringValues> MaybeUnknown" from headers is inaccessbile due to its protection level
// Casting headers as Dictionary<string, StringValues> results in null
await _next.Invoke(httpContext);
我的目标是提取所有请求标头,而不仅仅是一些我必须知道特定键的选定标头。
【问题讨论】:
IHeaderDictionary 实现了 IDictionary,你应该可以使用所有普通的 IDictionary API。var contentType = headers["Content-Type"];
https://***.com/questions/38794749/how-to-extract-custom-header-value?的可能重复
感谢大家的投入,我能够得到我想要的。为了获得我需要创建一个以 IHeaderDictionary 作为输入的新 Dictionaryvar headerDictionary = new Dictionary<string, StringValues>(headers)
httpContext.Request.Headers
是Dictionary
。您可以通过将标头名称作为键来返回标头的值:
context.Request.Headers["Connection"].ToString()
【讨论】:
感谢马克的回答!现在我知道如何提取我知道密钥的标题了。这已经很有帮助了,因为我根本不知道如何提取任何键值对标头。尽管如此,我的目标是提取所有标题,并且我想避免需要知道所有键。 我能够通过创建一个以headers
变量作为输入的新字典来获得我想要的东西。谢谢!以上是关于ASP.Net Core 2.0 如何获取中间件中的所有请求标头? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
ASP.Net Core 2.0 - 如何从中间件返回自定义 json 或 xml 响应?