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 を処理してメソッドのパラメーターを解決し、正しいパラメーターを明確に識別できるようにする必要があると思います。誰かがこれを行う方法についていくつかの指針を持っていますか? あるいは、フレームワークは、必要な正確なメソッドを解決する手段をすでに提供していますか?
本当にありがとう!