相关疑难解决方法(0)

倒带请求正文流

我正在重新实现一个请求记录器作为Owin Middleware,它记录所有传入请求的请求URL和正文.我能够读取正文,但是如果我在控制器中执行body参数则为null.

我猜它是空的,因为流的位置在最后,因此在尝试反序列化主体时没有什么可读的.我在以前版本的Web API中遇到了类似的问题,但是能够将Stream位置设置回0.这个特定的流引发This stream does not support seek operations异常.

在最新版本的Web API 2.0中,我可以Request.HttpContent.ReadAsStringAsync()在我的请求记录器内部调用,并且主体仍然可以直接到达控制器.

如何在阅读后回放流?

要么

如何在不消费的情况下阅读请求体?

public class RequestLoggerMiddleware : OwinMiddleware
{
    public RequestLoggerMiddleware(OwinMiddleware next)
        : base(next)
    {
    }

    public override Task Invoke(IOwinContext context)
    {
        return Task.Run(() => {
            string body = new StreamReader(context.Request.Body).ReadToEnd();
            // log body

            context.Request.Body.Position = 0; // cannot set stream position back to 0
            Console.WriteLine(context.Request.Body.CanSeek); // prints false
            this.Next.Invoke(context);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)
public class SampleController : ApiController 
{
    public void Post(ModelClass …
Run Code Online (Sandbox Code Playgroud)

.net asp.net asp.net-web-api owin owin-middleware

28
推荐指数
2
解决办法
1万
查看次数

标签 统计

.net ×1

asp.net ×1

asp.net-web-api ×1

owin ×1

owin-middleware ×1