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

问题描述:

前段时间,我创建了一个包含Web API 2项目(向移动设备提供JSON数据)和一个类库(包括我的数据访问服务)的解决方案。同一解决方案中的MVC和Web API项目

Web API项目使用Ninject for DI,一切正常。

现在我需要为几个网页添加一个单独的MVC项目。该API应可从www.example.com/api/controller访问,而网站应通过www.example.com/controller访问。

问题是,这两个中的每一个都有不同的“Register”方法,看起来不兼容的路由集合。如果我将MVC项目设置为启动项目,则不会注册api的路由,反之亦然。如果我设置了“多个启动项目”,他们在不同的端口上运行,这不是我的一杯茶。

如何将MVC项目设置为启动项目,同时为它们注册所有路由?

还有一件事。由于Web API项目更早创建,因此Ninject配置已写入其中。当然,新的MVC项目中需要来自类库项目的一些服务。我是否必须将N​​inject配置移动到MVC项目,或者他们只是在Web API项目启动时运行而工作?

+0

我有完全相同的问题。谢谢你的问题。希望你已经解决了你的问题。 – 2018-01-20 00:01:41

这2个项目彼此像2个不同应用独立即使它们在相同溶液

要成功,你努力实现你必须:

1)部署你的MVC项目www.example.com(主虚拟应用程序)。

2)部署您的WebAPI项目www.example.com/apiAPI文件夹是虚拟应用程序)。不要忘记从您的WebAPI路线中删除api(其他明智的你必须使用此路线www.example.com/api/api/controller)。

这样做,您可以独立访问中的两个项目,其URL为

对于NInject部分,您可以在MVC项目中再次注册服务。另一种解决方案(我建议)是制作一个类库项目并在那里注册服务,然后在两个项目中引用这个类库

+0

否否否上帝该死。停止使用两个框架来解决1个问题。 – Phill 2015-04-01 06:40:33

+1

@Phill,有两个问题。一个是为移动设备提供后端,另一个是定期显示信息的网站等。那么,您的确切建议是什么? – 2015-04-01 07:11:06

+0

@adricadar,感谢您提供独立的虚拟应用程序。请参阅此答案:http://stackoverflow.com/a/17023924我正在寻找类似的东西。 – 2015-04-01 07:16:18

我喜欢做的是在两个独立的项目(separation of concerns)中拥有MVC和WebAPI项目,但让他们共享相同的业务逻辑。

我喜欢使用命令和查询模式。因此,所有的命令和查询都位于另一个解决方案项目中,这是MVC和WebAPI项目都可以访问的项目。

我部署www.domain.com路径上的MVC项目,在api.domain.com该项目的WebAPI和的WebAPI的www起源启用CORS

+0

没有关注的分离。这是解决1个问题的2个框架。停下来。 – Phill 2015-04-01 06:40:54

+2

我会争辩说,MVC返回带有标记的视图,并且web api返回例如json或xml。然后,API可以独立于MVC运行。 – janhartmann 2015-04-01 06:54:19

+0

是的,除了vNext正在做本来应该做的事情,并且有一个框架。没有更多的WebAPI,因为它不是MVC的一部分。现在它像南希和其他框架一样正确处理连接。整个分离是愚蠢的,让很多人感到困惑,例如这个问题和答案。 – Phill 2015-04-01 06:58:31