今年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页面被正确地呈现。

到目前为止,我们已经学习了如何创建一个支持OpenAPI的Azure 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. 安装npm后,nrm ls报错问题

    一.nrm : 无法加载文件 E:\nodejs\nrm.ps1,因为在此系统上禁止运行脚本.有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135 ...

  2. 关于 pip 的 15 个使用小技巧

    认识pip 众所周知,pip可以对python的第三方库进行安装.更新.卸载等操作,十分方便. pip的全称:package installer for python,也就是Python包管理工具. ...

  3. 数据结构算法学习之队列(数组模拟java实现)

    数组模拟队列 数组模拟队列 今天学习数组模拟队列.队列常用于生活中的方方面面.比如银行叫号排队.实际上就是队列.所有人抽号排队.先去的先抽号.所以靠前的号最后会先被叫到然后出队.后边的会随之往前移位. ...

  4. ssrf解题记录

    ssrf解题记录 最近工作需要做一些Web的代码审计,而我Web方面还比较薄弱,决定通过一些ctf的题目打打审计基础,练练思维,在博客上准备开几个专题专门记录刷题的过程. pwn题最近做的也很少,也要 ...

  5. 编程熊讲解LeetCode算法《二叉树》

    大家好,我是编程熊. 往期我们一起学习了<线性表>相关知识. 本期我们一起学习二叉树,二叉树的问题,大多以递归为基础,根据题目的要求,在递归过程中记录关键信息,进而解决问题. 如果还未学习 ...

  6. Spring Cloud Alibaba - Spring Cloud Stream 整合 RocketMQ

    Spring Cloud Stream 简介 在微服务的开发过程中,可能会经常用到消息中间件,通过消息中间件在服务与服务之间传递消息,不管你使用的是哪款消息中间件,比如RabbitMQ.Kafka和R ...

  7. 超详细 Java 15 新功能介绍

    点赞再看,动力无限.微信搜「程序猿阿朗 」,认认真真写文章. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. Java 15 在 2 ...

  8. Convert a Private Project on bitbucket.com to a github Public Project

    Create a public repo on github, you can add README or License files on the master branch, suppose th ...

  9. 寻找写代码感觉(一)之使用 Spring Boot 快速搭建项目

    写在前面 现在已经是八月份了,我已经荒废了半年居多,不得不说谈恋爱确实是个麻烦的事,谈好了皆大欢喜,分手了就是萎靡不振,需要很长一段时间才能缓过来. 人还是要有梦想的,至于实现只不过是一个契机,但凡不 ...

  10. SpringBoot开发十二-账号设置

    需求介绍-账号设置 账号设置里面的上传头像(文件) 首先请求必须是一个 POST 请求,其次表单的属性 enctype = "multipart/form-data" 然后就是利用 ...