如何更改Asp.NET MVC中的控制器命名约定?

时间:2015-06-01 18:22:31

标签: c# asp.net asp.net-mvc asp.net-web-api

我开始在asp.NET MVC中开发。我需要将Web API与View项目分开,我希望WebAPI控制器具有来自View项目的不同命名约定,以便从用于视图的控制器轻松识别什么是webapi控制器。在这两个项目中,默认约定是name +' Controller'。如果有一种方法可以在webapi中更改它,例如,而不是WebAPiController',我希望名称约定为' WebAPICtrl' ou' WebAPiService'。

我发现它关闭的问题是: change controller name convention in ASP.NET MVC

如何在Asp.net mvc 5中存档此要求?

1 个答案:

答案 0 :(得分:5)

在Global.asax内部的Application_Start()方法中,您需要将ControllerBuilder.Current替换为控制器工厂的自定义实现。

 public class MvcApplication : HttpApplication
{

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        var controllerFactory = new CustomControllerFacotry();
        ControllerBuilder.Current.SetControllerFactory(controllerFactory);
    }
}

您需要一个类继承DefaultControllerFactory并使用您的自定义实现覆盖CreateController方法。请查看默认实现,以获取有关如何执行此操作的进一步指导。它看起来像这样。

public class CustomControllerFactory : DefaultControllerFactory
{
     public override IController CreateController(RequestContext requestContext, string controllerName)
    {
        string controllername = requestContext.RouteData.Values["controller"].ToString();       
        Type controllerType = Type.GetType(string.Format("Namespace.{0}",controllername));
        IController controller = Activator.CreateInstance(controllerType) as IController;
        return controller;

    }
}