Как получить атрибуты запрошенного метода действия

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

Большое спасибо!

7
задан Nate Kennedy 1 May 2012 в 15:23
поделиться