私は、MVC 3アプリケーションのコントローラでアクションメソッドをデコレートする可能性のあるすべての認証属性を調べようとしています。基本的にActionLinkのラッパーである私自身のHtmlHelper拡張メソッドでこれをやっています(実行時に利用可能な情報のコンテキストを提供するため)。私は基本的な解決策を用意していますが、オーバーロードされたメソッドではそれが爆発的になりました。私はフレームワークが内部的にURLをアクションメソッドに解決していることを知っていますが、System.Web.Mvc.LinkExtensionsのコードを見ても、どういうことが起こっているのかまだ分かりません。この問題に取り組む。要求されたアクションメソッドの属性を取得する方法
private static bool _IsUserAuthorized(HtmlHelper html,
string controllerName, string actionName)
{
controllerName = controllerName ??
html.ViewContext.RouteData.GetRequiredString("controller");
var factory = ControllerBuilder.Current.GetControllerFactory();
var controller = factory.CreateController(
html.ViewContext.RequestContext, controllerName);
Type controllerType = controller.GetType();
var methodInfo = controllerType.GetMethod(actionName,
BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
... check authentication
}
だから私の現在の問題は、メソッドがオーバーライドされたときに、私が得ることである「あいまいな一致が見つかった」例外:
はここで、これまでの関連する方法を解決するための私が持っているコードです。私はRouteValuesを処理してメソッドへのパラメータを解決する必要があると思いますので、正しい値を明白に識別できます。誰にどのようにこれを行うにはいくつかのポインターがありますか?あるいは、フレームワークはすでに必要な正確な方法を解決する手段を提供していますか?
ありがとうございます!
OKを取得しますので、私はMVC3のソースコードに掘り守ってきたと私はControllerDescriptorインスタンスおよび使用を取得する必要がありますように見える書いたメソッドをコピーしました適切なアクションメソッドのActionDescriptorを取得します。その場合、要求されたアクションメソッドがHtmlHelper.ViewContext.Controllerのコントローラでない場合、適切なコントローラのControllerContextを取得するにはどうすればよいですか? –
ControllerContextを取得することはかなり簡単です。 ControllerDescriptorを取得する。何かご意見は? –
ControllerDescriptorとActionDescriptorを取得するためのコード[here](http://weblogs.asp.net/jeffreyzhao/archive/2009/01/30/extend-asp-net-mvc-for-asynchronous-action.aspx)が見つかりました。近づく... –