Я пытаюсь просмотреть любые атрибуты аутентификации, которые могут украшать методы действий в моих контроллерах в приложении MVC 3. Я делаю это в своих собственных методах расширения HtmlHelper, которые в основном являются оболочками для ActionLink (, чтобы предоставить вам контекст той информации, которая у меня есть во время выполнения ). У меня есть базовое решение, но перегруженные методы только что заставили его взорваться. Я знаю, что фреймворк внутренне разрешает 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, чтобы разрешить любые параметры метода, чтобы я мог однозначно определить правильный. Есть ли у кого-нибудь указания о том, как это сделать? С другой стороны, предоставляет ли фреймворк средства для точного определения необходимого метода?
Большое спасибо!