У меня есть некоторое промежуточное программное обеспечение для регистрации, которое я настраиваю, чтобы получать и регистрировать информацию, используя HttpContext.
Мне нужно установить позицию HttpResponse.Body в 0, чтобы прочитать весь поток, однако, независимо от того, что я пытаюсь, он выдает «Указанный метод не поддерживается» и завершается ошибкой.
Это очень странно для меня, потому что позиция встроена прямо в HttpResponse.Body, и я использовал ее раньше успешно.
Я также пытался использовать HttpResponse.Body.Seek с тем же результатом.
На данный момент я застрял, любая помощь будет оценена.
ОБНОВЛЕНИЕ: я смог изменить положение response.body после перемещения его в новый поток памяти, однако теперь он возвращает пустое тело обратно.
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);
...
}
}