这篇文章主要讲解了”[Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”[Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能”吧!
<强>关于Blazor 强>
由于在国内,Blazor一点都不普及,在阅读此文前,建议读者先翻看我之前写的随笔,了解Blazor服务器端的特点。
在一段时间内,我会写一些解说分析型的“为什么选择Blazor服务器Side",在适当的时候再写快速入门系列。(无论是针对编程新学者还是多年经验人士)
<强>验证码强>
我们很多场合都实现过图片验证码。
图片验证码的主要关键是呈现图片,需要一个URL,而这个URL需要传递参数以确定显示什么东西。
这个验证码如何在服务器保存,如何传递一个参数公开给客户端,还不能让别人解密这个参数破解验证码,都是<强>麻烦事强>
这个例子是讲述如何用极短的“单页“代码,实现验证过程。
先上图:
@page “/BlazorVerificationCode" & lt; p> ,(Blazor) A sample for 请;用show verification code 以及verify 它。 & lt;/p> @inject IJSRuntime jsr @ { ,if (imgurl ==, null), MakeNewImage (); } & lt; img , src=癅imgurl",/比; & lt; button  @onclick=癕akeNewImage"祝辞Renew & lt; hr /比; & lt; div> Type 从而,number image<拷贝/div> & lt; EditForm 模型=皌his", OnSubmit=癉oCheck"比; ,& lt; input 类型=皌ext", @bind-value=癷np_code",,/比; ,& lt; button> Check & lt;/EditForm> @code { ,string inp_code; ,string vericode; ,string imgurl; ,void DoCheck () ,{ string 才能;msg =,“你typed a wrong value"; if 才能;(inp_code ==, vericode) ,,msg =,“Yes 从而number is “, +, vericode; jsr.InvokeAsync<才能;object> (“alert",, msg); ,} ,void MakeNewImage () ,{ 时间=vericode 才能;new 随机(). next (100000,, 999999) .ToString (); using 才能SkiaSharp.SKBitmap bmp =, new SkiaSharp.SKBitmap (200,, 80); using 才能;(SkiaSharp.SKCanvas canvas =, new SkiaSharp.SKCanvas (bmp)) {才能 ,,canvas.Clear (SkiaSharp.SKColors.White); ,,using SkiaSharp.SKPaint  skp =, new SkiaSharp.SKPaint (); ,,skp.Color =, SkiaSharp.SKColors.Red; ,,skp.TextSize =, 40; ,,canvas.DrawText (vericode, 30岁,55岁,skp); ,,canvas.Save (); ,,} using 才能;System.IO.MemoryStream 小姐=,new System.IO.MemoryStream (); using 才能SkiaSharp.SKManagedWStream ws =, new SkiaSharp.SKManagedWStream(女士); bmp.Encode才能(ws, SkiaSharp.SKEncodedImageFormat.Jpeg,, 100); imgurl =,才能“数据:图像/jpeg; base64,“, +, Convert.ToBase64String (ms.ToArray ()); ,} }
展现效果如下:
<强>下面是解说
强>
整个代码只有60行。
已经包含了,展示界面,生成图片,传递和测试验证码的各部分。
代码先用随机数确保生成<代码> vericode=new随机()。下(100000、999999).ToString(); 代码>
然后根据vericode生成一个图片,转换成base64格式到imgurl变量
最后通过<代码> & lt; img, src=https://www.yisu.com/zixun/" @imgurl "/> 代码>呈现出来。
我上一篇随笔有介绍,,Blazor是& # 39;活& # 39;的,是在服务器上生存着的。
<代码> & lt;按钮@onclick=癕akeNewImage"祝辞Renew代码>在服务器上有活动的实例,而在客户端浏览器也有& # 39;镜像副本& # 39;
当浏览器的& # 39;镜像副本& # 39;被用户点击后,Blazor就会把事件回传给服务器、触发服务器还在运行中的MakeNewImage
MakeNewImage会重新生成新的vericode与imgurl,并且按照Blazor默认行为,会自动重新呈现当前控件的内容,,所以& lt; img>的src会被重新设置到新的imgurl,展现新的图片给用户。