ASP.NET MVC自定义控制器类
问题描述:
在ASP.NET MVC中,如何在不使用“控制器”后缀的情况下制作控制器类?我无法在网上找到解决方案。 MSDN文档说控制器类名称必须以“控制器”结尾。ASP.NET MVC自定义控制器类
一些专家可以帮我吗?
谢谢。
杰里
答
你必须继承DefaultControllerFactory
使用自定义控制器工厂和覆盖GetControllerType
方法。
// instantiate controllers that doesn't have "Controller" suffix.
public class CustomControllerFactory: DefaultControllerFactory
{
protected override Type GetControllerType(System.Web.Routing.RequestContext requestContext, string controllerName)
{
var controllersNs = "MvcApp.Controllers";
return Type.GetType(string.Format("{0}.{1}", controllersNs, controllerName));
}
}
而你必须在Global.asax.cs中注册这个控制器工厂。
ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory());
重要:本DefaultControllerFactory
做更多的工作,通过缓存类型和其他的东西来提高性能,你必须寻找到source code以获得更好的主意。
+0
谢谢大家的答案。我只是好奇看看MVC如何在内部工作。每次我必须确保我的控制器类具有“控制器”后缀。根据答案提供的链接,我知道现在如何工作。 – 2012-07-12 17:23:08
为什么你想要一个没有后缀的控制器?这就是框架的工作原理。 – Jesse 2012-07-11 14:19:15
是的,你可以。但像@ jesse我很想知道你为什么要这样做? – devundef 2012-07-11 14:20:32
尽管可以完成,但如果你这样做的话,它会给你带来更多的负担。框架旨在通过遵循设定的计划来提高生产力。如果你想显着偏离该计划,首先使用该框架没有什么价值。 – 2012-07-11 15:54:47