还行吧:
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = System.Web.Http.RouteParameter.Optional });
但我想将传入请求重定向到 ApiFolder 文件夹的类

还行吧:
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = System.Web.Http.RouteParameter.Optional });
但我想将传入请求重定向到 ApiFolder 文件夹的类

您应该在路由配置中指定命名空间:
var r = GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new { id = System.Web.Http.RouteParameter.Optional },
);
if( r.DataTokens == null ){
r.DataTokens = new RouteValueDictionary();
}
r.DataTokens["Namespaces"] = new string[] {"ApiFolder"};
肯尼斯的建议不会像评论中所说的那样奏效。
但是,您可以编写自己的 IHttpControllerSelector 实现,并且仅在映射 api 路由时分配它。我以本文中的实现为基础并对其进行了修改。
然后它只是像这样在 WebApiConfig 中映射路由后替换默认选择器的小问题(其中 CustomControllerSelector 是我的实现):
public static void Register(HttpConfiguration configuration)
{
var apiRoute = configuration.Routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional, controllerNamespace = "api" }
);
configuration.Services.Replace(typeof(IHttpControllerSelector), new CustomControllerSelector(configuration));
}