使用标准MapRoute方法,a可以传递一个字符串集合,表示要在其中搜索我的控制器的命名空间。这似乎从MapHttpRoute中消失了。如何使用新的API路由定义默认命名空间?
答案 0 :(得分:16)
我们在Umbraco核心遇到了这个问题所以我们创建了自己的IHttpControllerSelector,源代码可以在这里找到:
您还可以安装包含NamespaceHttpControllerSelector
的nuget包WebAPIContrib
。
要注册此内容,您可以在应用启动时执行此操作:
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector),
new NamespaceHttpControllerSelector(GlobalConfiguration.Configuration));
实施非常简单,只处理具有"命名空间"的路由。您必须手动设置的datatoken集,因为MapHttpRoute不支持此操作。例如:
var r = routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
r.DataTokens["Namespaces"] = new string[] {"Foo"};
该实现还仅缓存具有重复名称的控制器,因为基础默认实现从其缓存中删除了重复项。
答案 1 :(得分:13)
目前不存在该功能。
答案 2 :(得分:2)
虽然此时此功能不存在,但 可以通过实现自己的IHttpControllerSelector来实现。
这篇博客文章深入探讨了细节:ASP.NET Web API: Using Namespaces to Version Web APIs
答案 3 :(得分:0)
您不需要使用Web API设置默认命名空间,它将在引用的程序集中搜索控制器(名称以'Controller'结尾的公共类型实现IHttpController)。
答案 4 :(得分:-3)
在MapHttpRoute工厂调用之前添加
System.Web.Mvc.ControllerBuilder.Current.DefaultNamespaces.Add("Namespace.Full.Controllers");