首页 文章

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

提问于
浏览
1

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

我发现它的问题很接近:change controller name convention in ASP.NET MVC

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

1 回答

  • 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;
    
        }
    }
    

相关问题