我设置了一些记录中间件,利用HttpContext获取和记录信息。
为了读取整个流,我需要将HttpResponse.Body的位置设置为0,但是无论我尝试什么,它都会抛出“指定的方法不受支持”并失败。
这对我来说非常奇怪,因为位置直接内置在HttpResponse.Body中,我以前也成功使用过它。
我还尝试使用HttpResponse.Body.Seek,结果相同。
现在我陷入了困境,任何帮助将不胜感激。
更新:当我将其移动到新的内存流中时,我能够使响应体的位置发生改变,然而,现在它返回一个空的响应体。
public async Task Invoke(HttpContext context)
{
//Retrieve request & response
var request = context.Request;
var response = context.Response;
if (request.Path != "/")
{
var reqBody = request.Body;
var resBody = response.Body;
string path = request.Path;
string method = request.Method;
string queryString = HttpUtility.UrlDecode(request.QueryString.ToString());
int statusCode = context.Response.StatusCode;
var buffer = new byte[Convert.ToInt32(request.ContentLength)];
await request.Body.ReadAsync(buffer, 0, buffer.Length);
var reqBodyText = Encoding.UTF8.GetString(buffer);
request.Body = reqBody;
var responseBodyStream = new MemoryStream();
context.Response.Body = responseBodyStream;
await _next(context);
responseBodyStream.Seek(0, SeekOrigin.Begin);
var resBodyText = new StreamReader(responseBodyStream).ReadToEnd();
responseBodyStream.Seek(0, SeekOrigin.Begin);
await responseBodyStream.CopyToAsync(context.Response.Body);
...
}
}