我正在使用ASP.NET Core 1.0 RC2创建一个公共REST API,并希望记录传入请求和传出响应。
我已经创建了一个中间件类,它被添加到管道中,在调用app.UseMvc()之前执行;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseIOMiddleware();
app.UseMvc();
}
我的中间件类看起来像这样:
public class IOMiddleware
{
private readonly RequestDelegate _next;
public IOMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
LogRequest(context.Request);
await _next.Invoke(context);
}
private async void LogRequest(HttpRequest request)
{
using (var bodyReader = new StreamReader(request.Body))
{
string body = await bodyReader.ReadToEndAsync();
request.Body = new MemoryStream(Encoding.UTF8.GetBytes(body));
System.Diagnostics.Debug.Print(body);
}
}
}
我可以使用这个例子读取请求体流并倒带: Rewind request body stream,但是我不确定如何读取响应体,因为它的流不可读。
在Web API 2.0中,我可以使用HttpResponseMessage.Content.ReadAsByteArrayAsync()方法,但在ASP.Net Core 1.0 RC2中我该如何实现相同的功能?