同一解决方案中的MVC和Web API项目

时间:2015-04-01 05:49:04

标签: c# asp.net-mvc asp.net-web-api

我前段时间创建了一个解决方案,其中包含一个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项目中需要来自类库项目的一些服务。我是否必须将N​​inject配置移动到MVC项目,或者它们是否正常工作,因为它们是在Web API项目启动时运行的?

2 个答案:

答案 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