如何在实现自定义路由时获取控制器类型?

时间:2014-09-26 21:29:12

标签: c# asp.net-mvc routes

我正在实现自定义路由,方法 GetVirtualPath 接收 RequestContext RouteValueDictionary

public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
}

我想知道目标控制器是否包含某些属性,到目前为止我找到了两种获取控制器类型的方法:

var f = ControllerBuilder.Current.GetControllerFactory();
var controller = f.CreateController(requestContext, values["controller"].ToString());
var type = controller.GetType();

我不喜欢这种方式,因为它实际上创建了控制器。我反编译CreateController方法,我发现它有一个内部方法 GetControllerType ,这是第二种方式:

var f = new DefaultControllerFactory();
var method = f.GetType().GetMethod("GetControllerType", BindingFlags.Instance | BindingFlags.NonPublic);
var type = method.Invoke(f, new[] { requestContext, values["controller"] }) as Type;

我不喜欢这种方式,因为它使用反射。

是否有更好的方法来获取控制器类型?

由于

0 个答案:

没有答案