2016-10-27 10 views
1

MvcとOpenID Connect Authを使用するASP.NETコアアプリケーションがあります。コントローラークラスの外でIRouterのインスタンスを取得する最も簡単な方法

OpenIDイベントハンドラでは、認証サーバーでユーザーが承諾画面を拒否した場合、そのユーザーを特定のページにリダイレクトして、ルーターを使用してリダイレクトURLを生成するケースを処理したいと考えています。ハードコードされたURLが好きではありません。

したがって、私はカスタムパラメータUseMvcを実装する必要がありました。このメソッドは、out-parameter経由でIRouterを呼び出してメソッドに戻します。次に、Startupメソッドのプロパティに保存し、その内部のすべてのメソッドから使​​用できます。

問題は私の解決策が私には間違っているように思えます。私が望むものを達成するためのより簡単な方法が必要なようです。誰かが私を正しい方向に向けることができるかどうか不思議です。

私のコードはhereです。私が言及したカスタムメソッドはhereです。そしてそれはthereと呼ばれ、解決されたルータはさらにhereを使用することができます。

+0

「IRouter」を取得したい、または['IUrlHelper'] ://stackoverflow.com/questions/30696337/unable-to-utilize-urlhelper/30697703#30697703)、そこにユーティリティメソッドを使用してURLを生成しますか? –

答えて

0

あなたは限り、あなたのコードがUseMvc()によって追加としてルーティングミドルウェア(。あなたはMVCのルートにアクセスすることはできません前に、それが実行される追加される場合がありますので、任意のカスタムミドルウェアの後に実行されるよう、ルータへのアクセスを得ることができます。

基本的にMVCのいずれかの種類は、コントローラ、フィルタ、タグヘルパーなどのように構築するのいずれかのように、ルータにアクセスすることができます:

var routers = httpContext.GetRouteData().Routers; 
var routers httpContext.Features.Get<IRoutingFeature>().RouteData.Routers; 

しかし、あなたのコードは、MVCが構築すでにある場合は、使用したほうが良いでしょうIUrlHelperは、次のようなメソッドを使用してURLを生成します。

urlHelper.Action("Index", "Home"); 

IUrlHeleperは(Controller派生クラス内のUrlプロパティなど)の複数の場所で容易に入手可能ですが、あなたはまた、this questionのようにDIを使用して取得することができます。 (DIを使用してDIを解決するコードがルーティングミドルウェアの後で実行されている限り)

+0

良い点ですが、私の場合はうまくいきません。問題は、Mvcの前にOpenID Connectコード(他の認証と同様)を置く必要があるか、そうでないと機能しないことです。 – kosmakoff

関連する問題