Ваша проблема в том, что вы создаете поток памяти, назначаете его на Response.Body
, но никогда не заполняете его:
using (var memStream = new MemoryStream())
{
context.HttpContext.Response.Body = memStream;
memStream.Position = 0;
responseBody = new StreamReader(memStream).ReadToEnd();
...
}
В этом коде memStream
это просто пустой поток, поэтому, когда вы читаете его, он ничего не читает.
Если вы пытаетесь получить доступ к результату метода контроллера, вы можете получить его через свойство context.Result
.
Или вы просто пытаетесь записать тело ответа перед возвратом звонящего? Фильтры не являются подходящим местом для этого - они больше связаны с параметрами вашего метода контроллера и возвращаемыми объектами. Конвейер MVC не заполнил Response.Body
, поэтому вы не можете получить к нему доступ - это делается промежуточным ПО MVC.
Вам нужно создать свое собственное промежуточное программное обеспечение для перехвата вызова, когда заполнен объект Response
, и вы можете записать это в журнал. Есть множество сайтов, которые могут показать вам, как это сделать. Одним из примеров является здесь