在ASP.NETMVC2中拦截HTTP

在ASP.NETMVC2中拦截HTTP,asp.net,asp.net-mvc-2,Asp.net,Asp.net Mvc 2,有人知道我如何截取页面的HTML并阻止它被呈现回客户端吗 我在控制器方法中尝试了以下操作: var writer = new StringWriter(); var response = new HttpResponse(writer); var context = new HttpContext(existingContext.Request, response) { User = existingContext.User }; System.Web.HttpConte

有人知道我如何截取页面的HTML并阻止它被呈现回客户端吗

我在控制器方法中尝试了以下操作:

var writer = new StringWriter();
var response = new HttpResponse(writer);
var context = new HttpContext(existingContext.Request, response) { User = existingContext.User };            
System.Web.HttpContext.Current = context;

//The method controller method returning an ActionResult for the page I want to render
var ViewResult = ControllerMethod();
ViewResult.ExecuteResult(this.ControllerContext);
string html = writer.ToString();
我认为在这一点上,html字符串应该具有本应呈现的页面的html。目前,html变量是一个空字符串。我怀疑这是因为设置System.Web.HttpContext.Current不会影响控制器的HTTP上下文。这是一个可能的原因吗?如果是的话,如果属性是只读的,是否有一种经过批准的设置上下文的方法


我试图通过捕获正在创建的原始HTML并将其传递给第三方组件来将页面呈现为PDF。包含上述代码的控制器操作将获取原始HTML并将其转换为PDF,然后返回该文件。

使用以下命令将视图呈现为字符串,然后可以将该字符串传递给PDF生成器

string RenderViewToString(string viewName, object model, string masterName)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = ControllerContext.RouteData.GetRequiredString("action");

        ViewData.Model = model;

        using (StringWriter sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext, viewName, masterName);

            ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);

            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }