以前我会把控制器放到Mvc Web Api的一个单独的类库项目中。我会在Web Api项目的global.asax文件中添加以下行来寻找单独项目中的控制器:
I used to place my controllers into a separate Class Library project in Mvc Web Api. I used to add the following line in my web api project's global.asax to look for controllers in the separate project:
ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");
除了添加上述行之外,我从未进行其他配置。这对我一直很有效。
然而,我无法在WebApi2中使用上述方法来实现相同的功能。它只是无法工作。WebApi2项目仍然尝试在其自己项目的控制器文件夹中查找控制器。
-- 两个月后的小结更新(因为我在此发布了赏金):
我创建了一个WebApiOne解决方案,其中有2个项目,第一个是WebApi项目,第二个是用于控制器的类库。如果我将控制器类库项目的引用添加到WebApi项目中,则所有工作都正常。即,如果我转到 http://mydevdomain.com/api/values,我可以看到正确的输出。
我现在创建了一个名为WebApiTwo的第二个项目,其中有2个项目,第一个是WebApi2项目,第二个是用于控制器的类库。如果我将控制器类库项目的引用添加到WebApi2项目中,它不会按预期工作。也就是说,如果我转到http://mydevdomain.com/api/values,我会收到“找不到与名称为'values'的控制器匹配的类型”。
对于第一个项目,我根本不进行任何自定义设置,我没有:
ControllerBuilder.Current.DefaultNamespaces.Add("MyClassLibraryProject.Controllers");
在我的global.asax中,我没有实施StrathWeb在他的两篇博客文章中提出的任何自定义解决方案,因为我认为它已经不再适用了; 因为只需将控制器项目的引用添加到WebApi项目中,所有工作都可以正常进行。
因此,我预期WebApi2的所有工作方式都应该相同...但事实并非如此。有人真的在WebAPi2中尝试过这样做吗?