我试图在 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 来解析方法的任何参数,这样我就可以明确地识别出正确的参数。有没有人有一些关于如何做到这一点的指示?或者,该框架是否已经提供了一种解决所需确切方法的方法?
非常感谢!