如何做ASP.NET Web API在使用MSBUILD构建后即可工作

本文关键字:构建 MSBUILD 工作 ASP 何做 NET Web API | 更新日期: 2023-09-27 17:57:31

我是编码新手,大部分时间都在用Phonegap开发移动应用程序,我一直在学习如何编写ASP。NET Web API,我知道当代码在我面前打开时,它通常是如何工作的,但是--

今天有人问我一个问题,我在回答这个问题时出丑了。假设你有一个ASP。NET Web API由多个项目组成,一个项目用于核心API及其控制器,一个用于其存储库,另一个用于正在使用的数据结构。路由已设置,因此他们将查找myServer.com/api/myController/giveMeSomeData。当MSBUILD完成它的任务并构建API时,它会生成一个长的dll列表,其中包含myApi.dll、myRepositories.dll、myDataStructures.dll和引用的库。一旦这些都被推送到Azure云服务或任何IIS实例来承载它,服务器如何找到/api/myController,以及它在构建的文件中实际位于哪里?

如何做ASP.NET Web API在使用MSBUILD构建后即可工作

WebApi是一个web项目,在编译时会创建一个dll。它不是一个类库或nuget包来消费和使用它。我已经在现实世界的应用程序中实际实现了这一点,下面是我的想法,供您理解

你的问题是

一旦这一切被推送到Azure云服务或任何IIS实例来承载它,服务器如何找到/api/myController以及在哪里它真的存在于构建的文件中吗?

  • 我们无法预测dll的行为,因为一切都以托管代码的形式进行。问你这个问题的人试图问你关于部署自动化的问题,但他/她自己并没有完全意识到这一点。构建工件是解决方案(.sln)的dll集合。我想,向您提出这个问题的人可能只是在服务器中看到了这些dll,而不知道使用MSBUILD的实际概念是什么。确切的问题应该是您将如何在服务器、azure等中部署web api的dll以及依赖于dll的(存储库、控制器和其他项目)

    要回答这个问题,我们需要了解有关web项目部署的信息。使用MSBUILD讨论部署自动化是一个非常有趣的话题

MSBUILD是一种基于xml的脚本语言,可帮助您编译和构建你的.net应用程序和一种非常有趣的用于构建自动化的语言。

ASP。NET Web API也是一种ASP。NET应用程序,而没有网页或视图(如果是MVC),它的部署方式应该与我们部署MVC应用程序的方式相同。当然,我们在一个解决方案文件(.sln)下有很多项目,比如存储库、控制器。通过使用MSBUILD编译解决方案,我们创建了构建工件。

  1. 所有web项目都需要构建工件,这些工件可以直接导入作为iis manager/Azure等下的网站或应用程序。我们将根据web API创建一个.zip文件,并将其导入到inetmgr中。你可以把这个.zip文件导入到任何你想导入的地方(比如在另一台机器上)。

  2. 构建工件是通过使用MSBUILD脚本编译应用程序来执行aspnet_compiler.exe来创建的。此链接将帮助您做到这一点。无论什么信息,比如路由、控制器等等,我们都会进行预编译并创建预编译的dll。当一切都以二进制形式进行时,问你它在预编译后会如何表现是不好的。

  3. 整个过程称为部署自动化。查看链接中的命令行部署using MSBUILD部分,阅读有关部署自动化的内容将有助于您进一步了解这一点。

如果你需要更多的答案,请回复我,我会进一步帮助你,或者你可以在谷歌上搜索部署自动化。希望这能帮助你选择答案。

从未尝试过将web api部署到azure,但我一直在将web api部署到AWS,我认为它也是一样的。。

一旦您在AWS中提供了一个windows服务器实例(EC2),您将获得一个公共IP地址。为了论证起见,假设您的公共IP地址为55.77.321.10,那么您的api将可以从以下位置访问:http://55.77.321.10/api/values

如果服务器在本地,则需要为服务器本身配置域名服务器。

无论是在云中还是在本地,您的web api都将托管在IIS服务器中。

假设您有自己的域并在windows服务器上安装了IIS,则需要执行以下步骤:

打开DNS管理控制台。要打开DNS,请单击"开始",单击"控制面板",双击"管理工具",然后双击"DNS"。

找到www.domain.com正向查找区域。

创建新的CNAME记录

点CNAME->记录www.domain.com

在IIS中,您只需将第二个网站的绑定设置为IP地址:same,端口:80,主机:www.domain.com