用 Azure 函数构建 QR 码生成器( 三 )


http://localhost:7071/api/GenerateQRCode这将是我们调用来生成二维码的 URL , 我们将从 JAVAScript 调用它 。
接下来 , 创建方法:
C#
public static async Task<IActionResult> Generate(br[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log)br{brbr} 
我们正在创建一个名为 Generate 的方法 , 我们传入一些参数来告诉应用程序我们需要一个 HttpTrigger:
[HttpTrigger在这个触发器中 , 我们传递了一些参数 。
我们希望将授权设置为匿名 , 以便任何人都可以访问它:
AuthorizationLevel.Anonymous我们只想接受对此 URL 的 GET 请求 , 因此下面的参数指定:
"get",然后我们将路线设置为空 。如果我们想要一个不同的 URL 或特定的路由 , 我们可以在这里指定它 。为了简单起见 , 我们就让它保持原样:
Route = null)]接下来 , 我们将传入一个 HttpRequest 对象 。这将包含来自传入请求的数据 , 以便我们可以从中获取参数 。当一个 GET 请求被发送到我们的函数中时 , 我们可以提取头、参数等信息 。
HttpRequest req最后 , 我们将传入一个日志记录器 , 以便能够记录消息 。
ILogger log很好 , 现在我们已经构建了方法 , 让我们填写它 。
从查询字符串收集信息用户必须发送他们想要转换成二维码的文本 。通常是个网址 。我们很早就决定让事情变得简单 。我们将从发送到 API 的查询字符串中收集这些信息 。
还记得我们传递给方法的 HttpRequest 吗?我们可以从中得到 Query 参数 。我们可以建立一个字符串变量 , 然后从查询字符串中获取参数:
C#
string qrtext = req.Query["qrtext"]; 
添加以下消息以记录输出 。我们想显示发送到 qrtext 变量的内容:
C#
log.LogInformation("Generating QR Code for {0}", qrtext); 
这样 , 我们就可以复查发送的内容了 。
现在 , 让我们生成我们的二维码 。
生成二维码到 PNG接下来 , 我们需要获取字符串 , 将其编码为二维码 , 然后将其导出为 PNG 。
因此 , 我们将对之前安装的 QRCode 库进行静态调用 。我们将传入要生成的文本和错误纠正值 。中号就可以了 。
C#
var qr = QrCode.EncodeText(qrtext, QrCode.Ecc.Medium); 
这就是生成二维码的全部过程 。但它是 SVG 格式的 。我们需要把它转换成一个 PNG , 这样我们就可以显示它 。
由于我们在上面添加了位图扩展 , 现在我们的 QR 对象有一个方法可以将 QR 代码转换成带有一些参数的 PNG 。
我们需要添加一个比例: 我使用了10 , 这似乎产生了一个不错的大小 。
我用1表示边界 。
然后我将前景(代码)设置为 SKColors 。黑色 , 背景设置为 SKColors 。白色 。
输入密码如下:
C#
var pngout = qr.ToPng(10, 1, SkiaSharp.SKColors.Black, SkiaSharp.SKColors.White); 
现在我们有了二维码 。太简单了!现在让我们将其打包为 JSON 并发送出去!
创建 JSON 返回对象我们一直在公共静态类 GenerateQRCode 中创建此代码 。让我们创建另一个类 , 它将创建一个简单的对象 , 我们可以在调用 API 时返回这个对象 。
在 GenerateQRCode 类的外部(在最后一个}之前)创建一个 Return nObject 类 。
这个类只有一个名为 Image 的属性 。这将是一个字符串 , 我们将把 PNG 编码为文本 。
C#
public class ReturnObject {brpublic string Image { get; set; }br} 
现在回到 GenerateQRCode 类 , 让我们回到刚才的地方 , 我们将创建一个新的 Return nObject:
C#
var ourResult = new ReturnObject{}; 
现在 , 我们将 PNG 映像转换为 Base64字符串 , 并将该字符串添加到返回对象中:
C#
ourResult.Image = Convert.ToBase64String(pngout);放松 。现在我们将把 POCO (普通的旧类对象)作为一个新的 JsonResult 返回 , 因此它将 JSON 返回给调用者:
C#
return new JsonResult(ourResult); 
就是这样 。在大约七行代码中 , 我们将一个字符串转换成二维码 , 然后将其发送出去.


推荐阅读