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

J86*_*J86 9 asp.net-mvc asp.net-web-api

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

我在我的解决方案中创建了一个多层架构,在我的TPlan.API项目中,我有以下配置的路由Global.asax

GlobalConfiguration.Configuration.Routes.Add("default",
            new HttpRoute("api/{controller}"));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

mysite的:端口/ API /测试

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

但是它对我不起作用,我得到以下结果:

没有找到与请求URI"mysite:port/api/test"匹配的HTTP资源.

spa*_*man 5

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

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

我们这样工作

View => POST/GET => MVC Controller => HTTP Request => API Controller

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

  • 说得好。顺便提一下,您可以右键单击 Web API 项目并选择 Debug > Start,然后对 MVC 项目执行相同操作。 (2认同)

Cla*_*ies 2

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