[Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能

  介绍

这篇文章主要讲解了”[Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习”[Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能”吧!

<强>关于Blazor

由于在国内,Blazor一点都不普及,在阅读此文前,建议读者先翻看我之前写的随笔,了解Blazor服务器端的特点。

在一段时间内,我会写一些解说分析型的“为什么选择Blazor服务器Side",在适当的时候再写快速入门系列。(无论是针对编程新学者还是多年经验人士)

<强>验证码

我们很多场合都实现过图片验证码。

图片验证码的主要关键是呈现图片,需要一个URL,而这个URL需要传递参数以确定显示什么东西。

这个验证码如何在服务器保存,如何传递一个参数公开给客户端,还不能让别人解密这个参数破解验证码,都是<强>麻烦事

这个例子是讲述如何用极短的“单页“代码,实现验证过程。

先上图:

 [Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能“> </p> <p>再上代码:</p> <pre类= @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 ());   ,}      }

展现效果如下:

 [Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能

<强>下面是解说

整个代码只有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,展现新的图片给用户。

[Asp。网络核心]怎么用Blazor服务器端实现图片验证码功能