标签:style blog http ar io color os sp on
最近的项目有一个需求,就是在每个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); ... }
标签:style blog http ar io color os sp on
原文地址:http://www.cnblogs.com/wangguangxin/p/4171626.html