首页 > 代码库 > WebAPI 读取Request的InputStream
WebAPI 读取Request的InputStream
最近的项目有一个需求,就是在每个Request开始的时候,读取每个Request的body中的内容,做些Logging,然后再根据Route分别处理。
大概是这个样子
[HttpPost][Route("api/{id}/add")]public HttpResponseMessage Add(string id, [FromBody]string body){ ...}
为了在每个Request开始的时候做logging,只要在Global.asax.cs的Application_BeginRequst中做相应处理
protected void Application_BeginRequest(object sender, EventArgs e){ var request = ((HttpApplication)sender).Request; string content; using (var reader = new StreamReader(request.InputStream)) { content = reader.ReadToEnd(); } ...}
这样虽然可以拿到request.InputStream中的内容,但是却进不去Add函数了,原因是WebAPI不能再从request.InputStream读取body的值。
即使我在Application_BeginRequest中把request.InputStream.Position = 0,还是不行。
造成这种情况可能的原因是,StreamReader在Dispose的时候,把request.InputStream也Dispose了。
解决办法
protected void Application_BeginRequest(object sender, EventArgs e){ var request = ((HttpApplication)sender).Request; string content; var bytes = new byte[request.InputStream.Length]; request.InputStream.Read(bytes, 0, bytes.Length); request.InputStream.Position = 0; string content = Encoding.UTF8.GetString(bytes); ...}
WebAPI 读取Request的InputStream
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。