如何从不同项目中的MVC控制器调用WebAPI?

时间:2017-03-28 13:49:22

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

我必须为我现有的MVC项目创建一个Web API,并让API控制器调用服务层和模型,它们包含在单独的项目中但在同一个解决方案中,然后创建并映射到DTO。

Layout of my Projects Solution in VS (忽略 BookService.cs 。我只是尝试做一个WebAPI教程,我暂时把它放在同一个解决方案中。)

我一直在阅读WebAPI以及它在过去两天的运作方式,但是我无法完全理解如何在不引用它的情况下为我的MVC项目创建API控制器?我还必须在我的主要项目中调用uri来制作视图,但此时我感到非常困惑。

如果有人能够澄清我是如何解决这个问题或者指导我学习使用Web API的过程的某种来源,那将对我有所帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

Web Api项目将是一个单独的“网站”,您需要单独托管。您的MVC项目将使用HttpClient向Web Api发出请求。

由于Web Api将是独立的,因此您将无法使用Url.RouteUrl等帮助程序来获取Web Api操作的URL。您还需要知道 Web Api的完整URI,包括它的域。将无法以编程方式确定此信息,因此我建议您使用应用程序设置以避免在MVC项目中进行硬编码。

在解决方案资源管理器中右键单击MVC项目,然后选择“属性”。然后单击“设置”选项卡。在这里,您可以添加MVC应用程序可以使用的强类型设置。重要的是,这些设置仍然保留在Web.config中,因此您可以使用配置转换更改它们。例如,您的Web Api可能会有不同的URL,具体取决于您是在开发还是生产中,这样可以很容易地确保您在正确的环境中做出正确的事情。

您可以添加WebApiUri之类的设置,并为其指定System.Uri类型。然后,将其设置为 development 中托管Web Api的字符串值,即http://localhost:12345。设置特定于您的开发环境非常重要,因为配置转换不适用于开发。对于登台,制作等,您将在适用的配置转换中适当更改此设置,并在发布时将其更新为正确的环境值。

然后,当您需要使用它时,您将只执行以下操作:

var client = new HttpClient();
client.BaseAddress = Properties.Settings.Default.WebApiUri;

然后,通过客户端正常发出请求。有关使用HttpClient的详细信息,请参阅the documentation

相关问题