Захват вывода HTML с помощью фильтра действий контроллера

У меня есть следующий фильтр для действия для захвата вывода HTML, преобразования его в строку, выполнения некоторых операций по изменению строки и возврата ContentResult с новой строкой. К сожалению, я продолжаю получать пустую строку.

private class UpdateFilter : ActionFilterAttribute
    {
        private Stream stream;

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            stream = filterContext.HttpContext.Response.Filter;
            stream = new MemoryStream();
            filterContext.HttpContext.Response.Filter = stream;
        }

        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            StreamReader responsereader = new StreamReader(filterContext.HttpContext.Response.Filter);  //empty stream? why?
            responsereader.BaseStream.Position = 0;
            string response = responsereader.ReadToEnd();
            ContentResult contres = new ContentResult();
            contres.Content = response;
            filterContext.Result = contres;
        }
    }

Я зафиксировал, что StreamReader (stream) .ReadToEnd () возвращает пустую строку, но я не могу понять почему.

Есть идеи, как исправить это?

РЕДАКТИРОВАТЬ : Я изменил OnActionExecuted на OnResultExecuted, и теперь он вызывается после создания представления, но поток все еще пуст!

7
задан yoozer8 22 February 2013 в 16:59
поделиться