具有下划线的WebAPI控制器名称

时间:2014-12-05 21:50:06

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

WebAPI有一个命名约定" FooController"对于控制器名称。这与ASP.NET MVC类似。我们的代码库使用下划线来分隔标识符中的单词,例如" Foo_Bar_Object&#34 ;.为了使控制器名称遵循此约定,我们需要一种方法来命名我们的控制器" Foo_Controller"。

基本上,我们不希望网址路由看起来像" oursite.com/api/foo _ /",而且我们不希望为了下划线(例如路线配置,视图文件夹的名称等)。要在MVC中执行此操作,我们执行:

Global.asax中

protected void Application_Start() {

    ...

    ControllerBuilder.Current.SetControllerFactory(new Custom_Controller_Factory());
}

Custom_Controller_Factory.cs

public class Custom_Controller_Factory : DefaultControllerFactory
{
    protected override Type GetControllerType(RequestContext request_context, string controller_name)
    {
        return base.GetControllerType(request_context, controller_name + "_");
    }
}

这似乎完全解决了MVC中的所有问题。有没有办法为WebAPI做同样的事情?我听说过有关DefaultHttpControllerFactory的谣言,但我无法在任何地方找到它。

1 个答案:

答案 0 :(得分:2)

我认为 DefaultHttpControllerSelector 正是您所寻找的。

class CustomHttpControllerSelector : DefaultHttpControllerSelector {

   public CustomHttpControllerSelector(HttpConfiguration configuration) 
      : base(configuration) { }

   public override string GetControllerName(HttpRequestMessage request) {

      IHttpRouteData routeData = request.GetRouteData();
      string controller = (string)routeData.Values["controller"]

      return controller + "_";
}

<强> Global.asax中

GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector), new sh_Custom_Http_Controller_Selector(GlobalConfiguration.Configuration));
相关问题