0

コントローラーの OnActionExecuting で、永続的なリダイレクトを実行しようとしています。コードは次のようになります。

protected override void OnActionExecuting(ActionExecutingContext filterContext) {
  var resolvedUrl = "http://www.cnn.com";
  filterContext.Result = new RedirectResult(resolvedUrl);
  filterContext.Result.ExecuteResult(filterContext);
  return;
}

このメソッドは基本クラスにあり、return ステートメントの後に継承されたクラスのOnActionExecutingメソッドが呼び出されるため、すぐにはリダイレクトされません。

質問: リダイレクトを実行してそこで停止し、継承されたクラスで何もしないようにするにはどうすればよいですか? ありがとう。

注:子クラス(ベースから継承するクラス)ではbase.OnActionExecuting(filterContext);OnActionExecuting.

4

1 に答える 1

0

アクションフィルター内からExecuteResult()を呼び出さないでください。filterContext.Resultをnull以外の値に設定するだけで、MVCパイプラインがそれ以上のフィルターを呼び出さないようにすることができます。

サブクラス化されたタイプは、代わりに次のように変更する必要があります。

base.OnActionExecuting(filterContext);
if (filterContext.Result != null) {
  return; // something got short-circuited
}
于 2012-08-24T18:27:35.453 に答える