码迷,mamicode.com
首页 > Windows程序 > 详细

WebAPI 读取Request的InputStream

时间:2014-12-18 14:59:03      阅读:865      评论:0      收藏:0      [点我收藏+]

标签: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);
    
    ...
}

 

WebAPI 读取Request的InputStream

标签:style   blog   http   ar   io   color   os   sp   on   

原文地址:http://www.cnblogs.com/wangguangxin/p/4171626.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!