使用标准 MapRoute 方法,a 可以传递一个字符串集合,该集合表示要在其中搜索我的控制器的命名空间。这似乎已经从 MapHttpRoute 中消失了。如何使用新的 API 路由定义默认命名空间?
问问题
14811 次
5 回答
18
我们在 Umbraco 核心中遇到了这个问题,所以我们创建了自己的 IHttpControllerSelector,源代码可以在这里找到:
您还可以安装WebAPIContrib
包含NamespaceHttpControllerSelector
.
要注册它,您可以在应用启动时执行此操作:
GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerSelector),
new NamespaceHttpControllerSelector(GlobalConfiguration.Configuration));
该实现非常简单,仅处理具有“命名空间”数据令牌集的路由,您必须手动设置这些路由,因为 MapHttpRoute 不支持这一点。例子:
var r = routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
r.DataTokens["Namespaces"] = new string[] {"Foo"};
该实现还仅缓存发现具有重复名称的控制器,因为底层默认实现会从其缓存中删除重复项。
于 2014-06-27T03:46:06.153 回答
13
该功能目前不存在。
于 2012-02-22T22:10:51.017 回答
2
尽管此时该功能不存在,但是您可以通过实现自己的 IHttpControllerSelector 来做到这一点。
这篇博客文章深入探讨了一些细节:ASP.NET Web API:使用命名空间对 Web API 进行版本控制
于 2013-07-12T09:08:40.883 回答
0
您不需要使用 Web API 设置默认命名空间,它会在引用的程序集中的所有命名空间中搜索控制器(名称以“Controller”结尾的公共类型,它实现了 IHttpController)。
于 2012-08-24T22:50:44.423 回答
-3
在 MapHttpRoute Factory 调用之前添加
System.Web.Mvc.ControllerBuilder.Current.DefaultNamespaces.Add("Namespace.Full.Controllers");
于 2013-03-26T21:33:41.907 回答