ASP.NET MVC自定义控制器类

问题描述:

在ASP.NET MVC中,如何在不使用“控制器”后缀的情况下制作控制器类?我无法在网上找到解决方案。 MSDN文档说控制器类名称必须以“控制器”结尾。ASP.NET MVC自定义控制器类

一些专家可以帮我吗?

谢谢。

杰里

+2

为什么你想要一个没有后缀的控制器?这就是框架的工作原理。 – Jesse 2012-07-11 14:19:15

+0

是的,你可以。但像@ jesse我很想知道你为什么要这样做? – devundef 2012-07-11 14:20:32

+0

尽管可以完成,但如果你这样做的话,它会给你带来更多的负担。框架旨在通过遵循设定的计划来提高生产力。如果你想显着偏离该计划,首先使用该框架没有什么价值。 – 2012-07-11 15:54:47

你必须继承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