2010-10-19 4 views
1

Quelqu'un a-t-il une idée de comment intercepter le code HTML d'une page et l'empêcher de revenir au client?Intercepter HTTP dans ASP.Net MVC 2

J'ai essayé ce qui suit, dans une méthode de commande:

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(); 

Je pense qu'à ce stade, la chaîne html doit avoir le code HTML de la page qui aurait été rendu. En l'état, la variable html est une chaîne vide. Je suppose que cela est dû au fait que la définition de System.Web.HttpContext.Current n'affecte pas le contexte HTTP du contrôleur. Est-ce une cause probable, et si oui, y a-t-il une façon approuvée de définir le contexte étant donné que la propriété est en lecture seule?

J'essaie de rendre une page au format PDF en capturant le code HTML brut en cours de création et en le transmettant à un composant tiers. L'action du contrôleur contenant le code ci-dessus prendra alors le HTML brut et le convertira en PDF, puis le retournera.

Répondre

2

Utilisez ce qui suit pour rendre une vue d'une chaîne - qui peut ensuite être transmis à votre générateur de 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(); 
     } 
    } 
+0

semble prometteur grâce - Je vais vous donner qu'un aller! –