Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 同一解决方案中的MVC和Web API项目_C#_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

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

C# 同一解决方案中的MVC和Web API项目,c#,asp.net-mvc,asp.net-web-api,C#,Asp.net Mvc,Asp.net Web Api,我不久前创建了一个解决方案,其中包含一个WebAPI2项目(向移动设备提供JSON数据)和一个类库(包括我的数据访问服务) WebAPI项目将Ninject用于DI,一切正常 现在我需要为几个网页添加一个单独的MVC项目。api应可从www.example.com/api/controller访问,而网站应通过www.example.com/controller访问 问题在于,这两种方法中的每一种都有一个不同的“Register”方法,其路由集合似乎不兼容。如果我将MVC项目设置为启动项目,则不

我不久前创建了一个解决方案,其中包含一个WebAPI2项目(向移动设备提供JSON数据)和一个类库(包括我的数据访问服务)

WebAPI项目将Ninject用于DI,一切正常

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

问题在于,这两种方法中的每一种都有一个不同的“Register”方法,其路由集合似乎不兼容。如果我将MVC项目设置为启动项目,则不会注册api的路由,反之亦然。如果我设置“多个启动项目”,它们在不同的端口上运行,这不是我喜欢的

如何将MVC项目设置为启动项目,同时为这两个项目注册所有路由


还有一件事。因为Web API项目创建得更快,所以Ninject配置已写入其中。当然,类库项目中的一些服务在新的MVC项目中是必需的。我是否必须将Ninject配置移动到MVC项目,还是因为它们在Web API项目启动时运行才起作用?

这两个项目彼此独立,就像两个不同的应用程序一样,即使它们在相同的解决方案中

要想成功,你必须:

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

2) 将您的WebAPI项目部署到
www.example.com/api
api文件夹是一个虚拟应用程序)。不要忘记从WebAPI路由中删除
api
(其他方面,您必须使用此路由
www.example.com/api/api/controller

这样,您可以在同一url中独立访问两个项目


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

我喜欢做的是将MVC和WebAPI项目放在两个单独的项目()中,但让它们共享相同的业务逻辑

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


我在
www.domain.com
路径上部署了MVC项目,在
api.domain.com
路径上部署了WebAPI项目,并在WebAPI上为
www
源代码启用了该项目。

不,不,不,不,该死。停止使用两个框架来解决一个问题。@Phill,有两个问题。一个是为移动设备提供后端,另一个是显示信息的常规网站等。那么您的确切建议是什么?@adricadar,感谢您建议单独的虚拟应用程序。请看这样的答案:我正在寻找类似的东西。@Delphi.Boy我在答案中寻找,我以前从未这样做过,我帮不了你。但从我所读到的我不认为有这样的分离真的很好。。。(MVC+WebAPI从类库中引用),我更喜欢有2个虚拟应用程序的,这是一个简单的解决方案。@AlexanderDerck这是正确的,基本上域名将访问根文件夹内容,域名+api将访问子文件夹根文件夹/api没有分离的问题。解决一个问题需要两个框架。我认为,MVC返回带有标记的视图,而web api返回json或xml等。然后api也可以独立于MVC运行。是的,除了vNext正在做本来应该做的事情,而且只有一个框架。不再有WebAPI,因为它不是MVC的一部分。现在,它像Nancy和其他框架一样正确地处理conneg。整个分离是愚蠢的,迷惑了太多的人,例如这个问题和答案。我明白了,但我们还没有在生产中运行vNext。不过,我可能会在vNext中为我的“api”设置一个单独的项目。@janhartmann,我在两个单独的项目中有MVC和Web api(就像您喜欢做的那样!),但我不想要
api
子域。