2011-02-03 8 views
14

私はローカルURLのリストを持っており、 "有効なMVCパス"かどうかを判断する必要があります。 URL(パス)がMVCコントローラにマップされているかどうかを確認する方法はありますか?ルート(ASP.NET MVC)が特定のパスに存在するかどうかを確認するにはどうすればよいですか?

Phil Haack's Route Debuggerは、現在の要求と一致するルートを検出し、現在のHttpContextを使用します。可能であれば、模擬HttpContextを構築せずにこの情報を得たいと思います。

+0

ブラウザにパスを入力し、404を確認しますか? – Pierreten

+0

有効なパスであるか、有効なMVCパスであるかをチェックしますか? – SLaks

+0

@SLaks有効なMVCパス – mawtex

答えて

14

模擬HttpContextBaseでRouteTable.Routes.GetRouteDataを呼び出すことができます。

経路は、要求のAppRelativeCurrentExecutionFilePathを使用して内部的に照合されます。
しかし、この機能は公開されていないので、HttpContextBaseを渡す必要があります。

HttpContextBaseクラスを作成し、requestプロパティにHttpRequestBaseインスタンスを返す必要があります。
HttpRequestBaseクラスのパスは、~/で始まるAppRelativeCurrentExecutionFilePathプロパティで返される必要があります。

IRouteConstraintによって使用されていない限り、他のプロパティを実装する必要はありません。

MVCルートがあるかどうかを確認するには、結果のrouteData.Handler is MvcRouteHandlerを確認してください。

+0

模擬するにはどのような部品が必要ですか? – mawtex

+1

@mawtex: 'Request.AppRelativeCurrentExecutionFilePath'であなたのURLを返す' HttpContextBase'クラスを作成します。 – SLaks

+1

必要なAppRelativeCurrentExecutionFilePathについての貴重な言及は、私が今このテストを書いているときに非常に貴重なものです。私は一回以上投票することができますように:) – CRice