WebAPI对于控制器名称具有命名约定“ FooController”。这类似于ASP.NET MVC。我们的代码库使用下划线将标识符中的单词分开,例如“ Foo_Bar_Object”。为了使控制器名称遵循此约定,我们需要一种将控制器命名为“ Foo_Controller”的方法。
基本上,我们不希望URL路由看起来像“ 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的传闻,但在任何地方都找不到。
我认为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));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句