返回

c#读取HttpModule中的HTTP请求正文

发布时间:2022-03-03 17:55:38 252

我有一本书。NET核心Web API在IIS中运行。我想在IIS登录帖子中添加请求正文。所以进来。NET完整框架我用一个实现IHttpModule的类创建了类库。我必须使用。NET完整框架,因为IHttpModule不在核心中。

我的问题是请求InputStream只能读取一次。因此,当我在代码中阅读它时,当它到达我的核心API时,流已经到达了它的末端(并且流对象已经被修改)。我已经尽了我所能,我已经搜索了很多。

什么不起作用:

var bytes = new byte[request.InputStream.Length];
request.InputStream.Read(bytes, 0, bytes.Length);
request.InputStream.Position = 0;
var content = Encoding.UTF8.GetString(bytes);

是的,我的身体很好,但是水流位置没有重置。重置位置没有帮助。

var reader = new StreamReader(HttpContext.Current.Request.InputStream, Encoding.UTF8, true, 1024, true);
HttpContext.Current.Request.InputStream.Position = 0;

最后一个标志应该告诉流保持打开状态,但对核心的调用仍然失败。

context.HttpContext.Request.Body

标准版中没有。网

然后我试了一下:

var s2 = new MemoryStream(request.TotalBytes);
HttpContext.Current.Request.InputStream.CopyTo(s2);

还是失败了。即使是这个小代码也会让它失败:

var v = request.TotalBytes;

我至今的想法

查看流的源代码,我可以看到,在读取属性时,流的一些内部数据发生了更改,所以我认为是IIS在将消息发送到Kestrel之前确保消息未被篡改。有人能解释一下吗?也许你知道还有谁能完成这个任务?

旁注:是的,我可以使用其他IIS模块以其他方式获取正文消息,但他们不会将其放入标准IIS日志中,而是创建自己的日志。我已经在我的麋鹿堆栈中使用IIS日志,这就是为什么这样做会更容易。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
相关帖子
下一篇
node.js-npm安装卡在extract:区域。js 2022-03-03 16:30:47