ASP.NET MVC-コンソールアプリケーションからのコントローラーアクションメソッド

StackOverflow https://stackoverflow.com/questions/1631623

  •  06-07-2019
  •  | 
  •  

質問

出力をファイルにレンダリングするために使用するコンソールアプリケーションが必要です。

擬似コード:

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

さまざまなアプローチを試したので、ここでは実際のコードを使用していませんが、何も近づきません。

Stephen Waltherからのヒント#25 は次のとおりです。

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

これにより、部分ビューが見つからなかったSystem.InvalidOperationExceptionがスローされます。 Viewsフォルダのさまざまな場所を試しましたが、運はありませんでした。

アイデアはありますか?ありがとう!

役に立ちましたか?

解決

私はあなたがやろうとしていること以外の何かを推奨しようとする人ではありませんが、ワイアットに同意します。レンダリングされた出力を単にファイルに保存する必要がある場合、おそらくコントローラーから保存する必要があるときに呼び出されるアプリサービスを用意する方が簡単だと思います。その場合、現在のHttpContext、ルートなどにアクセスできます。

完全に別のアプリである場合(コンソールアプリは単独で存在します)、レンダリングされた出力を取得するためにコンソールアプリが呼び出すことができるメソッドを含むWebアプリ内からサービスを設定する場合はどうですか?

他のヒント

HttpContextなどがないため、アプリを何かでホストせずにレンダリングするものを取得するのは難しいでしょう。

今、WebRequestを使用して実行中のバージョンのアプリからページを取得し、ディスクにダンプするのはもう少し実行可能です。

最後に、これは少し難解に聞こえます。この操作の目標は何ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top