【问题标题】:BufferedMediaTypeFormatter HttpContent does not contain all Headers sent in RequestBufferedMediaTypeFormatter HttpContent 不包含 Request 中发送的所有 Headers
【发布时间】:2015-11-05 09:11:35
【问题描述】:

在我的 Owin Self 托管 Web Api 项目中,我正在尝试构建一个继承自 BufferedMediaTypeFormattercustom MediaTypeFormatter。 但问题是传入ReadFromStream(..)HttpContent 对象不包含请求中发送的所有标头。

您如何访问在请求中发送的所有标头(我知道这一点是因为我提出了请求),还是在 ReadFromStream(..) 方法中访问原始 HttpRequestMessage

这似乎是一个重大错误,我想不出为什么没有提供所有 Request 标头。

【问题讨论】:

  • 您能否更具体地说明哪些标头在 HTTPContent 中不可用?我正在尝试创建一个示例,但没有看到任何未通过的标题。

标签: asp.net asp.net-web-api2 owin


【解决方案1】:

听起来 ASP.NET Request 对象没有为您要查找的特定标头字段名称公开属性。

所以看起来首先,您需要请求,并且您可以覆盖GetPerRequestFormatterInstance

How do I retrieve the HTTP request method in an ASP.NET WebAPI MediaTypeFormatter?

获得请求对象后,您可以像这样搜索您要查找的特定标头字段名称:

IEnumerable<string> headerValues = request.Headers.GetValues("MyHeaderFieldName");
var id = headerValues.FirstOrDefault();

如果需要,您还可以获取原始请求:

Request.InputStream.Position = 0;
var input = new StreamReader(Request.InputStream).ReadToEnd();

【讨论】:

  • 在 BufferedMediaTypeFormatter 范围内没有代表请求的对象,因此您的所有示例都不相关。
  • 好吧,看来您的问题比您的起点提前了一步。你需要这个请求,所以谷歌“在 BufferedMediaTypeFormatter 中的访问请求”
  • 我更新了我的答案,也许你可以重写 GetPerRequestFormatterInstance 来获取当前请求的请求对象
  • 再一次,您没有阅读问题。 GetPerRequestFormatterInstance 用于写出响应,因为您将 HttpRequestMessage 传递给它。我想获取请求的标头,以便我可以正确实现 ReadFromStream。
猜你喜欢
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-24
  • 2019-03-28
  • 2015-08-31
  • 2016-11-15
  • 2016-06-21
  • 2021-01-19
相关资源
最近更新 更多