快速入门:使用 Visual Studio 在 Azure 中创建第一个 C# 函数

Azure Functions 让你可以使用 Visual Studio 创建本地 C# 函数项目,然后轻松发布此项目以在 Azure 中的可缩放无服务器环境中运行。 如果更喜欢使用 Visual Studio Code 在本地开发 C# 应用,应改为考虑本文的基于 Visual Studio Code 的版本

默认情况下,本文介绍如何在隔离的工作进程中创建在 .NET 8 上运行的 C# 函数。 Functions 支持的所有 .NET 版本都支持在独立工作进程中运行的函数应用。 有关详细信息,请参阅支持的版本

在本文中,学习如何:

  • 使用 Visual Studio 创建 C# 类库项目。
  • 创建响应 HTTP 请求的函数。
  • 在本地运行代码以验证函数行为。
  • 将代码项目部署到 Azure Functions。

完成本快速入门会从你的 Azure 帐户中扣取最多几美分的费用。

先决条件

创建函数应用项目

Visual Studio 中的 Azure Functions 项目模板创建了一个 C# 类库项目,该项目可发布到 Azure 中的函数应用。 可使用函数应用将函数分组为逻辑单元,以便更轻松地管理、部署、缩放和共享资源。

  1. 在 Visual Studio 菜单中,选择“文件”>“新建”>“项目”。

  2. 在“创建新项目”中,在搜索框中输入“functions”,选择“Azure Functions”模板,然后选择“下一步”。

  3. 在“配置新项目”中,输入项目的“项目名称”,然后选择“下一步”。 函数应用名称必须可以充当 C# 命名空间,因此请勿使用下划线、连字符或任何其他的非字母数字字符。

  4. 对于剩余的“其他信息”设置,

    设置 说明
    Functions 辅助角色 .NET 8.0 隔离(长期支持) 你的函数在隔离的工作进程中在 .NET 8 上运行。
    Function HTTP 触发器 此值会创建由 HTTP 请求触发的函数。
    将 Azurite 用于运行时存储账户 (AzureWebJobsStorage) 启用 由于 Azure 中的函数应用需要存储帐户,因此在将项目发布到 Azure 时会分配或创建一个存储帐户。 HTTP 触发器不使用 Azure 存储帐户连接字符串;所有其他触发器类型需要有效的 Azure 存储帐户连接字符串。 选择此选项后,将使用 Azurite 仿真器
    授权级别 匿名 在未提供密钥的情况下,任何客户端都可以触发创建的函数。 通过此授权设置可以轻松测试新函数。 有关密钥和授权的详细信息,请参阅授权密钥HTTP 和 Webhook 绑定

    Screenshot of Azure Functions project settings.

    请确保将“授权级别”设置为“匿名”。 如果选择默认级别的函数,需要在请求中提供函数密钥才能访问 Azure 中的函数终结点。

  5. 选择“创建”以创建函数项目和 HTTP 触发器函数。

Visual Studio 将创建一个项目和一个包含 HTTP 触发器函数类型样本代码的类。 样本代码发送 HTTP 响应,其中包含来自请求正文或查询字符串的值。 HttpTrigger 属性指定该函数将由某个 HTTP 请求触发。

重命名函数

Function 方法属性设置函数的名称(默认情况下生成为 Function1)。 由于工具不允许在创建项目时覆盖默认函数名称,请花一点时间为函数类、文件和元数据创建更好的名称。

  1. 在“文件资源管理器”中,右键单击 Function1.cs 文件并将其重命名为 HttpExample.cs

  2. 在代码中,将 Function1 类重命名为 HttpExample

  3. 在名为 Run 的方法中,将 Function 方法属性重命名为 HttpExample

函数定义现在应如以下代码所示:

[Function("HttpExample")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.AuthLevelValue, "get", "post")] HttpRequest req)
{
    return new OkObjectResult("Welcome to Azure Functions!");
}

重命名函数以后,即可在本地计算机上对其进行测试。

在本地运行函数

Visual Studio 与 Azure Functions Core Tools 集成,这样你便可使用完整的 Azure Functions 运行时在本地测试函数。

  1. 若要运行函数,请在 Visual Studio 中按 F5。 你可能需要启用防火墙例外,这样工具才能处理 HTTP 请求。 在本地运行函数时,永远不会强制实施授权级别。

  2. 从 Azure Functions 运行时输出复制函数的 URL。

    Azure local runtime

  3. 将 HTTP 请求的 URL 粘贴到浏览器的地址栏。 将查询字符串 ?name=<YOUR_NAME> 追加到此 URL 并运行请求。 下图显示了浏览器中由函数返回的本地 GET 请求的响应:

    Function localhost response in the browser

  4. 若要停止调试,请在 Visual Studio 中按 Shift+F5

确认该函数可以在本地计算机上正确运行以后,即可将项目发布到 Azure。

将项目发布到 Azure

Visual Studio 可以将本地项目发布到 Azure。 必须在 Azure 订阅中有一个函数应用,然后才能发布项目。 如果 Azure 中还没有函数应用,Visual Studio 发布会在你首次发布项目时为你创建一个函数应用。 本文介绍如何创建函数应用和相关的 Azure 资源。

  1. 在“解决方案资源管理器” 中,右键单击该项目并选择“发布”。 在“目标”中,选择“Azure”,然后选择“下一步”。

    Screenshot of publish window.

  2. 对于“特定目标”,请选择“Azure 函数应用(Windows)”(这将创建一个在 Windows 上运行的函数应用),然后选择“下一步”。

    Screenshot of publish window with specific target.

  3. 在“函数实例”中,选择“创建新的 Azure 函数…”。

    Screenshot of create a new function app instance.

  4. 使用下表中指定的值创建新的实例:

    设置 描述
    名称 全局唯一名称 用于唯一标识新 Function App 的名称。 接受此名称或输入新名称。 有效的字符是 a-z0-9-
    订阅 你的订阅 要使用的 Azure 订阅。 接受此订阅,或从下拉列表中选择一个新订阅。
    资源组 资源组的名称 你要在其中创建函数应用的资源组。 从下拉列表中选择一个现有资源组,或者选择“新建”来创建一个新的资源组。
    计划类型 消耗 将项目发布到在消耗计划中运行的函数应用时,只需为函数应用的执行付费。 其他托管计划会产生更高的成本。
    位置 应用服务的位置 在靠近你或者靠近函数访问的其他服务的区域中选择一个位置
    Azure 存储 常规用途存储帐户 Functions 运行时需要 Azure 存储帐户。 选择“新建”即可配置常规用途存储帐户。 也可选择一个符合存储帐户要求的现有帐户。

    Screenshot of Create App Service dialog.

  5. 选择“创建”,在 Azure 中创建一个函数应用及其相关资源。 资源创建的状态将显示在窗口左下角。

  6. 在“函数实例”中,确保已选中“从包文件运行”。 启用从包运行模式,函数应用将使用 Zip 部署进行部署。 建议为你的函数项目使用 Zip 部署方法,因为它可提高性能。

    Screenshot of Finish profile creation.

  7. 选择“完成”,然后在“发布”页面上选择“发布”,将包含项目文件的包部署到 Azure 中的新函数应用 。

    部署完成后,Azure 中函数应用的根 URL 将显示在“发布”选项卡中。

  8. 在“发布”选项卡中的“托管”部分中,选择“在 Microsoft Azure 门户中打开”。 此操作会在 Microsoft Azure 门户中打开新的函数应用 Azure 资源。

    Screenshot of Publish success message.

在 Azure 中验证函数

  1. 在 Cloud Explorer 中,应已选中新的函数应用。 如果未选中,请依次展开你的订阅 >“应用服务”,并选择新的函数应用。

  2. 右键单击函数应用,然后选择“在浏览器中打开”。 这会在默认的 Web 浏览器中打开函数应用的根,并显示指示函数应用正在运行的页面。

    Function app running

  3. 在浏览器的地址栏中,将字符串 /api/HttpExample?name=Functions 追加到基 URL,然后运行请求。

    调用 HTTP 触发器函数的 URL 采用以下格式:

    http://<APP_NAME>.chinacloudsites.cn/api/HttpExample?name=Functions

  4. 转到此 URL,你会在浏览器中看到函数返回的对远程 GET 请求的响应,如下例所示:

    Function response in the browser

清理资源

Azure 中的资源是指函数应用、函数、存储帐户等。 这些资源可以组合到资源组中,删除该组即可删除组中的所有内容。

你已创建 Azure 资源来完成本快速入门。 这些资源可能需要付费,具体取决于帐户状态服务定价。 本教程系列中的其他快速入门教程是在本文的基础上制作的。 如果打算使用后续的快速入门、教程或者在本快速入门中创建的任何服务,请勿清理这些资源。

请使用以下步骤删除函数应用及其相关资源,以免产生任何额外的费用。

  1. 在“Visual Studio 发布”对话框中的“托管”部分中,选择“在 Microsoft Azure 门户中打开”

  2. 在函数应用页中,请选择“概览”选项卡,然后选择“资源组”下的链接

    Select the resource group to delete from the function app page

  3. 在“资源组”页中查看所包括的资源的列表,然后验证这些资源是否是要删除的。

  4. 选择“删除资源组”,然后按说明操作。

    可能需要数分钟才能删除完毕。 完成后会显示一个通知,持续数秒。 也可以选择页面顶部的钟形图标来查看通知。

后续步骤

在本快速入门中,你已使用 Visual Studio,在 Azure 中创建并发布了一个 C# 函数应用,其中包含一个简单的 HTTP 触发器函数。

若要详细了解如何使用在独立工作进程中运行的 C# 函数,请参阅在独立工作进程中运行 C# Azure Functions 的指南。 请查看 .NET 支持的版本,了解独立工作进程中受支持的 .NET 版本的其他版本。

请转到下一篇文章,了解如何将一个 Azure 存储队列绑定添加到函数: