1

ASP.NET MVC3 には既存の作業コードがあります。MVC4 にアップグレードしようとしていますが、1 つのアクション メソッド呼び出しで例外がスローされています。

非同期アクション メソッド 'Get' は同期的に実行できません

MVC Async エラー - 非同期アクション メソッド 'Complete' は同期的に実行できません のような投稿を見たので、他の人が同様の問題に遭遇したことを知っています。

アクション呼び出しコードが非同期アクションを呼び出すと、エラーが発生します。コードを簡略化してみると、次のようになります。

String actionName = "Get";
AsyncControllerActionInvoker asyncInvoker = new AsyncControllerActionInvoker();
asyncInvoker.InvokeAction(controllerContext, actionName);

非同期メソッドは、AsyncController から派生したコントローラーにあり、次のように定義されます。

[Url("methodname/{type?}"), HttpGet]
public void GetAsync()

[NonAction]
public Output GetCompleted(Output output, Exception ex)

そのため、AsyncControllerActionInvoker.InvokeAction が AsyncController から派生したコントローラーで非同期メソッドを呼び出そうとすると失敗します。代わりに AsyncControllerActionInvoker.BeginInvokeAction() を呼び出す必要がありますか? これが MVC 3 で機能し、MVC 4 で失敗したのはなぜですか?

MVC 4 で非同期コントローラーの処理が改善されたことは知っています。ここに素晴らしい記事があります。しかし、AsyncController はまだ存在し、そのコメントには、「ASP.NET MVC 3 との後方互換性のために提供されています」と書かれています。ですから、古いコードが引き続き機能することを願っています。

4

0 に答える 0