Vista de render a cadena seguida de resultados de redireccionamiento en excepción

Así que aquí está el problema: estoy creando correos electrónicos para ser enviados por mi aplicación al mostrar páginas de vista completa a cadenas y enviarlas. Esto funciona sin problemas, siempre y cuando no esté redirigiendo a otra URL en el sitio más adelante. Siempre que lo intento, obtengo "System.Web.HttpException: no se puede redireccionar después de que se hayan enviado los encabezados HTTP".

Creo que el problema proviene del hecho de que estoy reutilizando el contexto de la acción del controlador de donde proviene la llamada para crear el correo electrónico. Más específicamente, el HttpResponse desde el contexto. Desafortunadamente, no puedo crear una nueva HttpResponse que haga uso de HttpWriter porque el constructor de esa clase es inalcanzable, y el uso de cualquier otra clase derivada de TextWriter provoca que response.Flush () produzca una excepción.

¿Alguien tiene una solución para esto?

    public static string RenderViewToString(
        ControllerContext controllerContext,
        string viewPath,
        string masterPath,
        ViewDataDictionary viewData,
        TempDataDictionary tempData)
    {
        Stream filter = null;
        ViewPage viewPage = new ViewPage();

        //Right, create our view
        viewPage.ViewContext = new ViewContext(controllerContext,
            new WebFormView(viewPath, masterPath), viewData, tempData);

        //Get the response context, flush it and get the response filter.
        var response = viewPage.ViewContext.HttpContext.Response;
        //var response = new HttpResponseWrapper(new HttpResponse
        //    (**TextWriter Goes Here**));
        response.Flush();
        var oldFilter = response.Filter;

        try
        {
            //Put a new filter into the response
            filter = new MemoryStream();
            response.Filter = filter;

            //Now render the view into the memorystream and flush the response
            viewPage.ViewContext.View.Render(viewPage.ViewContext,
                viewPage.ViewContext.HttpContext.Response.Output);
            response.Flush();

            //Now read the rendered view.
            filter.Position = 0;
            var reader = new StreamReader(filter, response.ContentEncoding);
            return reader.ReadToEnd();
        }
        finally
        {
            //Clean up.
            if (filter != null)
                filter.Dispose();

            //Now replace the response filter
            response.Filter = oldFilter;
        }
    }

Respuestas a la pregunta(3)

Su respuesta a la pregunta