【问题标题】:How can I change the Controller Naming Conventions in Asp.NET MVC?如何更改 Asp.NET MVC 中的控制器命名约定?
【发布时间】:2015-06-01 18:22:30
【问题描述】:

我开始使用 asp.NET MVC 进行开发。我需要将 Web API 与 View 项目分开,我希望 WebAPI 控制器具有与 View 项目不同的命名约定,以便轻松识别什么是 webapi 控制器和什么是视图控制器。在这两个项目中,默认约定是名称 + 'Controller'。如果有办法在 webapi 中更改它会很好,例如,而不是“WebAPiController”,我希望命名约定为“WebAPICtrl”或“WebAPiService”。

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

如何在 Asp.net mvc 5 中归档这个需求?

【问题讨论】:

  • 你问的是how to do this in MVC 5,还是Web Api 2?
  • 一个简单的文件夹结构怎么样 - /api 有什么“错误”吗?也许这比通过违背惯例的努力“更好”?
  • 有两个项目,一个 web api 和一个 mvc,都使用相同的约定:name + 'Controller'。长期发展会变得一团糟。

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


【解决方案1】:

在 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;

    }
}

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多