単に 404 を返すのではなく、ルート制約が失敗した場合にリダイレクトできるようにしたいと考えています。シナリオは次のとおりです。
- ユーザー ヒット ページ www.test.com/preview/home/
- ルート制約は、ページをプレビューできるかどうかを確認します
- そうでない場合は、www.foo.com/home/ にリダイレクトします。
これは可能ですか?
単に 404 を返すのではなく、ルート制約が失敗した場合にリダイレクトできるようにしたいと考えています。シナリオは次のとおりです。
これは可能ですか?
これは可能ですが、ルート制約ではできません。ルート制約は、このように使用することを意図していません。ルートの制約が満たされない場合、ルートは一致しません。何らかの承認を実行し、この承認が失敗した場合にリダイレクトする場合は、カスタムの Authorize 属性を記述し、コントローラー アクションをそれで装飾することをお勧めします。
2 つの可能性があります。
カスタム認証ロジックを既存の属性に追加したい。この場合、AuthorizeAttribute から派生させ、AuthorizeCore
およびHandleUnauthorizedRequest
メソッドをオーバーライドして、このロジックが失敗した場合に (ログオン ページに移動する代わりに) カスタム認証とリダイレクトを実行します。
基本機能は必要ありません。この場合、FilterAttribute から派生させてIAuthorizationFilter
インターフェイスを実装し、認証とリダイレクトのロジックをOnAuthorization
メソッド内に配置します。
どこからでもアクセスできる filterContext を使用して認証ロジックが失敗した場合にリダイレクトする方法の例を次に示します。
var values = new RouteValueDictionary(new
{
controller = "home",
action = "index"
});
filterContext.Result = new RedirectToRouteResult(values);