我前段时间创建了一个解决方案,其中包含一个Web API 2项目(向移动设备提供JSON数据)和一个类库(包括我的数据访问服务)。
Web API项目使用Ninject进行DI,一切正常。
现在我需要为几个网页添加一个单独的MVC项目。 api应该可以从www.example.com/api/controller
访问,而网站应该通过www.example.com/controller
访问。
问题是这两者中的每一个都有一个不同的“注册”方法,看似不兼容的路由集合。如果我将MVC项目设置为启动项目,则不会注册api的路由,反之亦然。如果我设置“多个启动项目”,它们会在不同的端口运行,这不是我的一杯茶。
如何将MVC项目设置为启动项目,同时为两者注册所有路由?
还有一件事。由于Web API项目是较早创建的,因此Ninject配置已在其中编写。当然,在新的MVC项目中需要来自类库项目的一些服务。我是否必须将Ninject配置移动到MVC项目,或者它们是否正常工作,因为它们是在Web API项目启动时运行的?
答案 0 :(得分:12)
这2个项目彼此独立,如 2个不同的应用程序,即使它们位于相同的解决方案中。
要成功实现你所要达到的目标,你必须:
1)将 MVC 项目部署到www.example.com
(主虚拟应用程序)。
2)将 WebAPI 项目部署到www.example.com/api
( api 文件夹是虚拟应用程序)。不要忘记从 WebAPI 路线中移除api
(否则您必须使用此路线www.example.com/api/api/controller
)。
执行此操作,您可以在相同网址中独立访问这两个项目。
对于NInject部分,您可以再次注册MVC项目中的服务。另一个解决方案(我建议)将创建一个类库项目,并在两个项目中引用此类库之后在那里注册服务。
答案 1 :(得分:2)
我喜欢做的是将MVC和WebAPI项目放在两个独立的项目(separation of concerns)中,但让他们共享相同的业务逻辑。
我喜欢使用命令和查询模式。因此,所有命令和查询都位于另一个解决方案项目中,MVC和WebAPI项目都可以访问该项目。
我在www.domain.com
路径上部署MVC项目,在api.domain.com
上部署WebAPI项目,并在www
来源的WebAPI上启用CORS。