経路の実行前に属性を介してAPI呼び出しを実行したい。カスタマーアクションフィルターを作成し、OnExecuting()オーバーライド関数を使用しました。.NET MVC経路前に属性内で非同期タスクを実行する
関数内では、別のサーバーへの非同期API呼び出しを待ちます。しかし、デバッグ中は、非同期呼び出しが完了する前にRouteが実行されていることがわかります。どうすればこれを達成できますか?
[CustomAttribute("Stuff")]
[Route("MyRoute")]
public async Task<IHttpActionResult> MyRoute()
{
await anotherAsyncFunction();
return Ok();
}
カスタムアクションフィルタの定義。
public class CustomAttribute : ActionFilterAttribute
{
private string att;
public CustomAttribute(string a)
{
att = a;
}
public async override void OnActionExecuting(HttpActionContext actionContext)
{
await MyFirstAsyncFunction();
}
}
残念ながら、これは残念ながらルートコードが実行される前に終了しません。
Yikes。別のサービスに基づいて通話をブロックしていますか?私はこのルートを避け、それを待ち行列に入れ、代わりにフラグをチェックすることを提案するでしょう。あなたは滑りやすい斜面を向いています。 - コメントは別として、APIを同期して呼び出す必要があります。 –
それはより同期化を待っていますか? – Tyler
あなたは['AsyncHelper'](http://stackoverflow.com/a/25097498/298053)を見て、あなたの呼び出しをラッピングすることをお勧めします。 –