Как я могу изменить соглашения об именах controllerов в Asp.NET MVC?

Я начинаю развиваться в asp.NET MVC. У меня есть требование отделить веб-API от проектов View, я хочу, чтобы controllerы WebAPI имели разные соглашения об именах из проекта View, чтобы легко определить, что такое controller webapi, из того, что является controllerом для просмотра. В обоих проектах стандартное соглашение – это имя + ‘Контроллер’. Было бы неплохо, если бы был способ изменить его в webapi, например, вместо «WebAPiController», я хочу, чтобы соглашение о названии было «WebAPICtrl» ou «WebAPiService».

Вопрос, который я нашел близким, заключается в следующем: изменение имени controllerа в ASP.NET MVC

Как я могу архивировать это требование в Asp.net mvc 5?

В методе Application_Start () внутри Global.asax вам нужно будет заменить ControllerBuilder.Current на пользовательскую реализацию controllerа.

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

Вам понадобится class для наследования от 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; } }