.NET 5 支持 Azure Functions OpenAPI 扩展啦
今年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上告诉我们!
参考资料
Github 存储库: Azure Functions OpenAPI扩展
Microsoft 文档:在Visual Studio中使用Azure Function和API管理集成创建无服务器API(预览版)
Microsoft学习平台: Azure Functions: 发现OpenAPI和Power应用
.NET 5 支持 Azure Functions OpenAPI 扩展啦的更多相关文章
- 利用Azure Functions和k8s构建Serverless计算平台
题记:昨晚在一个技术社区直播分享了"利用Azure Functions和k8s构建Serverless计算平台"这一话题.整个分享分为4个部分:Serverless概念的介绍.Az ...
- 使用 Visual Studio 开发、测试和部署 Azure Functions(一)开发
1,什么是Azure functions Azure Functions 是 Microsoft Azure 提供的完全托管的 PaaS 服务,用于实现无服务器体系结构. Azure Function ...
- 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制
Jonathan TulianiAzure网络 - DNS和 Traffic Manager高级项目经理 在北美 TechEd 大会上,我们宣布了 Azure Traffic Manager将支持 ...
- 使用VS code 创建 Azure Functions,从blob触发,解析,发送至Service Bus
更多内容,关注公众号:来学云计算 场景: 某设备定时于每天23:00左右将一天的运行日志.devicelogtxt上传到Azure Blob,期待Blob文件上传后, 自动通过Azure Functi ...
- 设备数据通过Azure Functions 推送到 Power BI 数据大屏进行展示(2.Azure Functions实战)
本案例适用于开发者入门理解Azure Functions/ IoT Hub / Service Bus / Power BI等几款产品. 主要实战的内容为: 将设备遥测数据上传到物联网中心, 将遥测数 ...
- 通过流量管理器和 Azure Functions(作为代理)为全球用户提供最靠近的认知服务(或自定义API)
本实战是一个中等复杂度的综合性实战,涉及到的内容有TrafficManager,AzureFunctions,域名/域名解析等几个内容. 本案例基础介绍: https://www.bilibili.c ...
- 使用 Visual Studio 开发、测试和部署 Azure Functions(二)测试,部署
1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...
- Azure Functions(二)集成 Azure Blob Storage 存储文件
一,引言 上一篇文章有介绍到什么是 SeverLess ,ServerLess 都有哪些特点,以及多云环境下 ServerLess 都有哪些解决方案.在这众多解决方案中就包括 Function App ...
- 技术博客:Azure Functions + Azure Storage 开发
Azure GitHub wiki 同步发布 传送门 Azure Functions 通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发.在本地 ...
随机推荐
- 构建后端第1篇之---springcloud项目依赖分析
张艳涛写于2021-2-2日 springcloud是springboot工程+cloud依赖,从这个角度来分析,使用springcloud实际上就是添加springcloud的某个以来比如eurek ...
- Mybatis学习笔记-Mybatis简介
如何获得Mybatis 中文文档 https://github.com/tuguangquan/mybatis Github https://github.com/mybatis/mybatis-3 ...
- 网络编程之TCP客户端开发和TCP服务端开发
开发 TCP 客户端程序开发步骤 创建客户端套接字对象 和服务端套接字建立连接 发送数据 接收数据 关闭客户端套接字 import socket if __name__ == '__main__': ...
- MarkDown语法(Typora软件为例)
Hello !我又来了 这篇文章主要给大家讲一下MarkDown的一些基础语法,MarkDown语法是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML( ...
- 使用jwt来保护你的接口服务
以前写过一篇关于接口服务规范的文章,原文在此,里面关于安全性问题重点讲述了通过appid,appkey,timestamp,nonce以及sign来获取token,使用token来保障接口服务的安全. ...
- 如何实现让div垂直居中,左右10px,高度始终为宽度一半
方法一:利用height:0; padding-bottom: 50%; <!DOCTYPE html><html lang="en"> <head& ...
- ASP.NET Corec初步使用Quartz.NET
一.什么是Quartz.NET? Quartz.NET 是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统. Quartz.NET是纯净的,它是一个.Net程序集,是非常流行的Ja ...
- javaSE基础之变量,常量,作用域和运算符
变量 变量是什么? 变量是可以变化得量 Java是一种强类型语言,每个变量都必须声明其类型. Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域 type varName [=v ...
- SpringBoot-静态资源加载-源码
目录 静态资源映射规则 什么是webjars 呢? 第二种静态资源映射规则 参考链接 静态资源映射规则 SpringBoot中,SpringMVC的web配置都在 WebMvcAutoConfigur ...
- Pikachu-php反序列化、XXE、SSRF模块
一.PHP反序列化 理解这个漏洞需要明白php中的两个函数,serialize(),unserialize() 1)序列化serialize()序列化说通俗点就是把一个对象变成可以传输的字符串,比如下 ...