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的谣言,但我无法在任何地方找到它。
答案 0 :(得分:2)
我认为 DefaultHttpControllerSelector 正是您所寻找的。 p>
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));