ASP.NET MVC - método de ação do controlador de aplicação de consola
-
06-07-2019 - |
Pergunta
Eu quero ter um aplicativo de console que eu usaria para tornar a saída para um arquivo.
Pseudocódigo:
ComponentBaseController controller = new ComponentBaseController();
SaveToFile("output.html", controller.Result);
Eu não estou usando o código real aqui desde que eu já tentou diferentes abordagens, mas nada me fica próximo.
O mais próximo que eu tenho usando Dica # 25 de Stephen Walther , é esta:
ComponentBaseController controller = new ComponentBaseController();
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "ComponentBase");
var fakeContext = new FakeControllerContext(controller, routeData);
var result = controller.Details("klasta7") as PartialViewResult;
result.ExecuteResult(fakeContext);
Console.Write(fakeContext.HttpContext.Response.ToString());
Este lança uma System.InvalidOperationException que a vista parcial não pôde ser encontrado. Tentaram locais diferentes para exibição de pasta, mas sem sorte.
Todas as idéias? Obrigado!
Solução
Eu não sou um para tentar a recomendar algo diferente do que você está pedindo para fazer, mas concordo com Wyatt, o objetivo parece um pouco sobre o lado pegajoso, e na melhor das hipóteses vai criar algum cheiro de código. Se você simplesmente precisa para salvar a saída renderizada para um arquivo, eu acho que seria mais fácil ter um serviço de aplicativo que é chamada quando você precisa fazer o salvar, provavelmente a partir do controlador. Nesse caso, você teria acesso a uma corrente HttpContext, rotas, etc.
Se é um aplicativo separado completamente (existe o aplicativo de console em seu próprio), que sobre a criação de um serviço de dentro do aplicativo web que tem um método a aplicação de console poderia chamar para recuperar a saída processada?
Outras dicas
Vai ser complicado para obter material para tornar sem que hospeda o aplicativo em algo como não há HttpContext, etc.
Agora, usando WebRequest para páginas de agarrar a partir de uma versão em execução do aplicativo e despejá-los para o disco é um pouco mais factível.
Finalmente, isso soa um pouco FUBAR. Qual é o objetivo dessa operação?