通常のWebフォームからMVCアクション結果を使用する方法(ControllerContextを偽装)?
-
06-07-2019 - |
質問
ブラウザにレンダリングする ActionResult
オブジェクトを返すプラグ可能なフレームワークがあります。最新の要件の1つは、プラグインが通常のASP.NET Webフォームアプリケーションから呼び出し可能であることです。
これまでのところ、これは非常に基本的なActionResultsで機能します:
public class ActionResultTranslator {
HttpContextBase _context;
public ActionResultTranslator(HttpContextBase context ) {
_context = context;
}
public void Execute(ActionResult actionResult) {
ControllerContext fakeContext = new ControllerContext();
fakeContext.HttpContext = _context;
actionResult.ExecuteResult(fakeContext);
}
}
上記をWebフォームから次のように呼び出します:
protected void Page_Load(object sender, EventArgs e) {
HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
var translator = new ActionResultTranslator(contextWrapper);
translator.Execute(new RedirectResult("http://google.com"));
}
すべてを接続するには、他に何をする必要がありますか?たとえば、ViewResultを返したい場合はどうなりますか?
解決
ControllerContextで偽造するプロパティが多すぎません。
- HttpContext -これでカバーされました
- コントローラー-私が知る限り、これがnullのままである場合、標準のActionResultsは気にしません
- RequestContext -nullのままにすると自動的に入力されます
- RouteData -nullのままにすると、空のコレクションが入力されます。
したがって、ActionResultがRouteDataに存在する任意のキーに依存することを心配するだけです。 ViewResultは、 action および controller を設定する限り、ビューファイルを探す場所を認識できるようにする必要があります。これらの値を持つRouteDataを提供するようにコードを変更する場合は、大丈夫です。
所属していません StackOverflow