Перехват HTTP в ASP.Net MVC 2 - PullRequest
       3

Перехват HTTP в ASP.Net MVC 2

1 голос
/ 19 октября 2010

Кто-нибудь знает, как я могу перехватить 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 контроллера.Является ли это вероятной причиной, и если да, то существует ли утвержденный способ установки контекста, учитывая, что свойство доступно только для чтения?

Я пытаюсь отобразить страницу в PDF, захватив создаваемый необработанный HTML и передаваяэто стороннему компоненту.Действие контроллера, содержащее приведенный выше код, затем возьмет необработанный HTML-код и преобразует его в PDF, а затем вернет его.

1 Ответ

2 голосов
/ 20 октября 2010

Используйте следующую команду для рендеринга представления в строку, которое затем может быть передано в ваш генератор 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();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...