今年5月,在 Build大会上,Azure FunctionsOpenAPI的功能支持(预览版)正式宣布。 当时,它最高支持 v3 运行时——.NET Core 3.1 版本。 最近,它发布了 .NET 5 隔离工作器支持包作为预览。在这篇文章中,我将回顾如何使用它并将其部署到 Azure。

注意:您可以在此 GitHub 存储库中找到本文中使用的示例代码:https://github.com/justinyoo/azfunc-openapi-dotnet

在 .NET 5 中创建 Azure Functions 应用程序

让我们使用Visual Studio来完成这个练习。在创建应用程序时,使用".NET 5(隔离)"运行时和"Http触发器"。

然后您将找到带有默认代码的HTTP端点。现在,在解决方案资源管理器上选择NuGet包管理器菜单。

在NuGet包管理器屏幕中,勾选"包括预发布"复选框,然后搜索Microsoft.Azure.Functions.Worker.Extensions.OpenApi包。在撰写本文时,NuGet打包程序版本是v0.8.1-preview。

OpenAPI扩展现在已经安装。

配置 HostBuilder

安装OpenAPI扩展之后,让我们配置HostBuilder。首先,打开Program.cs文件并删除现有的ConfigureFunctionsWorkerDefaults()方法。这是因为该方法默认使用System.Text.Json,我们不会使用它。

 public static void Main(){
var host = new HostBuilder()
// 删除以下这行
.ConfigureFunctionsWorkerDefaults()
// 删除以上这行
.Build();
host.Run();
}

然后,按此顺序添加ConfigureFunctionsWorkerDefaults(worker => worker. usenewtonsoftjson())和ConfigureOpenApi()方法。第一个方法明确声明要使用Newtonsoft.Json包,下一个导入额外的OpenAPI相关端点。

public static void Main()
{
var host = new HostBuilder()
// Add these lines below
.ConfigureFunctionsWorkerDefaults(worker => worker.UseNewtonsoftJson())
.ConfigureOpenApi()
// Add these lines above
.Build();
host.Run();
}

注意:目前,使用 System.Text.Json 并不能保证应用程序是否正常工作。 因此,强烈推荐使用 Newtonsoft.Json。

至此,配置完毕。 让我们继续。

添加 OpenAPI 修饰符

添加 OpenAPI 相关的修饰符,如下所示。 这与现有方法完全相同,所以我不会讲得太深。

//  在下面添加OpenAPI 相关的修饰符
[OpenApiOperation(operationId: "greeting", tags: new[] { "greeting" }, Summary = "Greetings", Description = "This shows a welcome message.", Visibility = OpenApiVisibilityType.Important)]
[OpenApiSecurity("function_key", SecuritySchemeType.ApiKey, Name = "code", In = OpenApiSecurityLocationType.Query)]
[OpenApiResponseWithBody(statusCode: HttpStatusCode.OK, contentType: "text/plain", bodyType: typeof(string), Summary = "The response", Description = "This returns the response")]
// 在上面添加OpenAPI 相关的修饰符
[Function("Function1")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req,
FunctionContext executionContext)
{
...
}

一旦你完成了修饰符的添加,你就完成了!让我们运行这个应用程序。

运行 Swagger UI

通过输入 F5 键或单击 Visual Studio上的调试按钮运行Function应用程序。

您将看到控制台中添加了OpenAPI相关的端点。

在web浏览器上运行http://localhost:7071/api/swagger/ui端点,您将看到Swagger UI页面。

现在已正确实施具有 OpenAPI 功能的 Azure Function 应用。

部署 Azure Function App – Windows

你确认你的 Azure Function 应用工作正常。现在需要部署该项目。首先,单击解决方案资源管理器中的"发布"菜单。

选择"Azure",然后选择"Azure Functions App (Windows)"。

您可以使用现有的 Function 应用程序实例或通过单击 按钮来创建一个新的应用程序实例。 这一次,让我们使用当前实例。

一旦部署完成,在web浏览器上打开Azure Functions URL,你就会看到Swagger UI页面。

部署 Azure Function 应用 - Linux

这一次,让我们将相同的应用程序部署到Linux实例。除此之外,让我们使用GitHub Actions。为了做到这一点,你必须将这个应用程序上传到GitHub存储库。因此,移动到"Git Changes"窗格并创建一个Git仓库。

如果你已经在Visual Studio中登录了GitHub,你就可以创建一个存储库并推送代码。

一旦推送了所有代码,请访问 GitHub 以检查您的存储库是否已实际上传所有代码。

让我们回到发布屏幕,点击" New"按钮来创建一个新的发布配置文件。

然后会出现一个类似的弹出窗口。这次让我们使用"Azure Function App (Linux)"菜单。

如前所述,您可以使用现有的实例或创建新的实例。我们就用现有的吧。

在前面的部署练习中,我们没有GitHub存储库。因此,我们不得不使用本地部署的方法。但这一次,我们有GitHub存储库,这意味着我们有选择。因此,这次我们不选择相同的部署方法,而是选择GitHub Actions。

GitHub Actions 工作流现已自动生成。 但这需要一个新的commit。

移至"Git Changes"窗格,输入如下所示的提交消息,单击"Commit All"按钮,然后推送更改。

当您实际访问您的 GitHub 存储库时,您的 GitHub 操作工作流会运行buil和部署。

一旦部署结束,打开一个新的web浏览器,访问Azure Functions应用程序URL,并发现Swagger UI页面被正确地呈现。

到目前为止,我们已经学习了如何创建一个支持OpenAPIAzure Functions应用程序,在.Net 5独立的工作环境中运行,并无需离开Visual Studio就将其部署到Azure。我猜理论上它也可以在。Net 6上很好运行。如果你好奇,请部署它,并在https://github.com/Azure/azure-functions-openapi-extension/issues上告诉我们!

参考资料

.NET 5 支持 Azure Functions OpenAPI 扩展啦的更多相关文章

  1. 利用Azure Functions和k8s构建Serverless计算平台

    题记:昨晚在一个技术社区直播分享了"利用Azure Functions和k8s构建Serverless计算平台"这一话题.整个分享分为4个部分:Serverless概念的介绍.Az ...

  2. 使用 Visual Studio 开发、测试和部署 Azure Functions(一)开发

    1,什么是Azure functions Azure Functions 是 Microsoft Azure 提供的完全托管的 PaaS 服务,用于实现无服务器体系结构. Azure Function ...

  3. 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制

    Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...

  4. 使用VS code 创建 Azure Functions,从blob触发,解析,发送至Service Bus

    更多内容,关注公众号:来学云计算 场景: 某设备定时于每天23:00左右将一天的运行日志.devicelogtxt上传到Azure Blob,期待Blob文件上传后, 自动通过Azure Functi ...

  5. 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(2.Azure Functions实战)

    本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...

  6. 通过流量管理器和 Azure Functions(作为代理)为全球用户提供最靠近的认知服务(或自定义API)

    本实战是一个中等复杂度的综合性实战,涉及到的内容有TrafficManager,AzureFunctions,域名/域名解析等几个内容. 本案例基础介绍: https://www.bilibili.c ...

  7. 使用 Visual Studio 开发、测试和部署 Azure Functions(二)测试,部署

    1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...

  8. Azure Functions(二)集成 Azure Blob Storage 存储文件

    一,引言 上一篇文章有介绍到什么是 SeverLess ,ServerLess 都有哪些特点,以及多云环境下 ServerLess 都有哪些解决方案.在这众多解决方案中就包括 Function App ...

  9. 技术博客:Azure Functions + Azure Storage 开发

    Azure GitHub wiki 同步发布 传送门 Azure Functions 通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发.在本地 ...

随机推荐

  1. Kafka流处理内幕详解

    1.概述 流处理是一种用来处理无穷数据集的数据处理引擎.通常无穷数据集具有以下几个特点: 无穷数据:持续产生的数据,它们通常会被称为流数据.例如:银行信用卡交易订单.股票交易就.游戏角色移动产生的数据 ...

  2. maven之---资源过滤 在java/main/resourse/*.xml ,*.properties引用maven属性${db.username}

    本文主要来源maven实战14.3 为了应对环境的变化,首先使用Maven属性将这个会发生变化的部分提取出来.在上一节的数据库配置中,连接数据库使用的驱动类,URL,用户名和密码都可能发生变化,因此使 ...

  3. 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁.具体来说,InnoDB 采用的是两阶段锁定协议(tw ...

  4. Activiti7 结束/终止流程

    1.  结束/终止 正在运行的流程实例 思路:跟回退一样的思路一样,直接从当前节点跳到结束节点(EndEvent) /** * 结束任务 * @param taskId 当前任务ID */ publi ...

  5. C# Get和Post请求接口类

    public class HttpHelper {/// <summary> /// Get请求 /// </summary> /// <param name=" ...

  6. RHCE_DAY06

    iptables防火墙 ----匹配及停止 nerfilter/iptables:工作在主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出 ...

  7. RHCE_DAY04

    sed流式编辑器 sed是一个非交互的文本编辑器,实现的功能跟vim相同,主要是对文件内容进行输出.删除.替换.复制.剪切.导入.导出等功能 命令格式1:前置命令 | sed [选项] '[指令]' ...

  8. 05.表达式目录树Expression

    参考文章 https://www.cnblogs.com/xyh9039/p/12748983.html 1. 基本了解 1.1 Lambda表达式 演变过程 using System; namesp ...

  9. Docker入门第五章

    常用其他命令 后台启动容器 #命令 docker run -d 镜像名! [root@lvshihao /]# docker run -d centos 757173133e8e73985f024dc ...

  10. ESP32CAM 人脸识别追踪

    引言 总体实现的流程:ESP32cam作为客户端,pc作为服务端通过mqtt协议建立通信,将采集的图像在电脑端显示人脸识别的方法使用的是opencv,并通过mqtt传输指令给esp32cam控制舵机云 ...