在同一个解决方案中,从MVC应用程序调用Web API

时间:2014-01-25 21:17:31

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

所以我对Web API完全陌生,我想我会开始一个测试项目来学习它和AngularJS以及它们如何很好地协同工作......等等。

我在我的解决方案中创建了一个多层架构,在我的TPlan.API项目中,我在Global.asax

中配置了以下路由
GlobalConfiguration.Configuration.Routes.Add("default",
            new HttpRoute("api/{controller}"));

enter image description here

TPlan.WEB是我的MVC应用程序,它被设置为“启动项目”。当我运行它时,我希望能够去:

  

mysite的:端口/ API /测试

从我的测试控制器中获取API的值。

然而,它不适合我,我得到以下内容:

  

找不到与请求URI'mysite:port / api / test'匹配的HTTP资源。

4 个答案:

答案 0 :(得分:5)

呃,在visual studio中,右键单击解决方案并转到属性。 转到启动并选择“多个项目”选项并勾选网站和Web服务以启动。

这将启动他们两个。但正如已经指出的那样,它们在不同的端口上运行,它们是完全独立的应用程序...... 我认为你不能注册属于网站之外的路线。

我们这样工作

查看=> POST / GET => MVC控制器=> HTTP请求=> API控制器

所以我们的mvc视图发布或者到我们的mvc控制器,然后我们发起一个单独的http请求到web api。这是服务器到服务器的调用,就像调用任何外部Web服务一样。我们等待来自api的响应,然后返回视图所需的任何内容......

答案 1 :(得分:2)

如果没有提前将IISAPI项目安装到IIS中,那么您在尝试的内容是不可能的,我确信这不是您想要的。两个项目都无法同时运行,因为只有一个项目能够启动IIS Express的调试会话。即使两个项目都能够同时运行,它们也会位于不同的逻辑端口上,并且必须将来自一个项目的路由手动发送到另一个实例的侦听端口。基本上,您的API项目中的Global.asax永远不会运行,因为该项目将构建为类库。

答案 2 :(得分:1)

使TPlan.API项目成为一个简单的程序集,从TPlan.Web引用它并将GlobalConfiguration.Configuration属性传递给API程序集中的Register方法。当MVC项目启动时,MVC路由和Web Api路由都将在同一个Web主机上处于活动状态。

Here是在同一解决方案中同时具有控制台主机和Web主机的API的示例。

答案 3 :(得分:-1)

请检查以下网站。我认为问题在于路线的配置

http://www.asp.net/web-api/overview/extensibility/configuring-aspnet-web-api