Domanda

Voglio avere un'applicazione console che utilizzerei per eseguire il rendering dell'output in un file.

Pseudocodice:

ComponentBaseController controller = new ComponentBaseController();
SaveToFile("output.html", controller.Result);

Non sto usando il vero codice qui da quando ho provato approcci diversi, ma nulla mi avvicina.

Il più vicino che ho ottenuto usando Suggerimento n. 25 di Stephen Walther , è questo:

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

Ciò genera un System.InvalidOperationException che non è stato possibile trovare la vista parziale. Ho provato diverse posizioni per la cartella Views, ma senza fortuna.

Qualche idea? Grazie!

È stato utile?

Soluzione

Non sono uno che cerca di consigliare qualcosa di diverso da quello che stai chiedendo di fare, ma sono d'accordo con Wyatt, l'obiettivo sembra un po 'appiccicoso e nella migliore delle ipotesi creerà un po' di odore di codice. Se hai semplicemente bisogno di salvare l'output del rendering in un file, penso che sarebbe più facile avere un servizio app che viene chiamato quando devi fare il salvataggio, probabilmente dal controller. In tal caso, avresti accesso a un HttpContext, a percorsi, ecc. Attuali

Se si tratta di un'app completamente separata (l'app console esiste da sola), che ne dici di configurare un servizio dall'interno dell'app web che abbia un metodo che l'app console potrebbe chiamare per recuperare l'output renderizzato?

Altri suggerimenti

Sarà difficile ottenere cose da rendere senza ospitare l'app in qualcosa in quanto non c'è HttpContext, ecc.

Ora, usare WebRequest per catturare pagine da una versione in esecuzione dell'app e scaricarle su disco è un po 'più fattibile.

Infine, questo suona un po 'FUBAR. Qual è l'obiettivo di questa operazione?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top