2012-07-11 104 views
1

在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

回答

2

你必須繼承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