今年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,我们不会使用它。

  1. public static void Main(){
  2. var host = new HostBuilder()
  3. // 删除以下这行
  4. .ConfigureFunctionsWorkerDefaults()
  5. // 删除以上这行
  6. .Build();
  7. host.Run();
  8. }

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

  1. public static void Main()
  2. {
  3. var host = new HostBuilder()
  4. // Add these lines below
  5. .ConfigureFunctionsWorkerDefaults(worker => worker.UseNewtonsoftJson())
  6. .ConfigureOpenApi()
  7. // Add these lines above
  8. .Build();
  9. host.Run();
  10. }

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

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

添加 OpenAPI 修饰符

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

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

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

运行 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. 构建后端第1篇之---springcloud项目依赖分析

    张艳涛写于2021-2-2日 springcloud是springboot工程+cloud依赖,从这个角度来分析,使用springcloud实际上就是添加springcloud的某个以来比如eurek ...

  2. Mybatis学习笔记-Mybatis简介

    如何获得Mybatis 中文文档 https://github.com/tuguangquan/mybatis Github https://github.com/mybatis/mybatis-3 ...

  3. 网络编程之TCP客户端开发和TCP服务端开发

    开发 TCP 客户端程序开发步骤 创建客户端套接字对象 和服务端套接字建立连接 发送数据 接收数据 关闭客户端套接字 import socket if __name__ == '__main__': ...

  4. MarkDown语法(Typora软件为例)

    Hello    !我又来了 这篇文章主要给大家讲一下MarkDown的一些基础语法,MarkDown语法是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML( ...

  5. 使用jwt来保护你的接口服务

    以前写过一篇关于接口服务规范的文章,原文在此,里面关于安全性问题重点讲述了通过appid,appkey,timestamp,nonce以及sign来获取token,使用token来保障接口服务的安全. ...

  6. 如何实现让div垂直居中,左右10px,高度始终为宽度一半

    方法一:利用height:0; padding-bottom: 50%; <!DOCTYPE html><html lang="en"> <head& ...

  7. ASP.NET Corec初步使用Quartz.NET

    一.什么是Quartz.NET? Quartz.NET 是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统. Quartz.NET是纯净的,它是一个.Net程序集,是非常流行的Ja ...

  8. javaSE基础之变量,常量,作用域和运算符

    变量 变量是什么? 变量是可以变化得量 Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type varName [=v ...

  9. SpringBoot-静态资源加载-源码

    目录 静态资源映射规则 什么是webjars 呢? 第二种静态资源映射规则 参考链接 静态资源映射规则 SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfigur ...

  10. Pikachu-php反序列化、XXE、SSRF模块

    一.PHP反序列化 理解这个漏洞需要明白php中的两个函数,serialize(),unserialize() 1)序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下 ...