asp.net core 腾讯验证码的接入示例代码_实用技巧

来源:脚本之家  责任编辑:小易  

asp.net mvc5只能运行在Windows,一般通过IIS发布;asp.net core开源,可跨平台,能够发布到Linux等系统上。asp.net core做了很多的整合工作,目前来说完成了最基本的一部分类库的迁移。从前景上来说,asp.net core肯定是以后的一种潮流,随着docker等技术的普及,跨平台的重要性凸显,必须要使用asp.net core编写的接口才能发布到linux中,也就是asp.net core编写的接口可以做成docker的镜像发布,而asp.net mvc5不能。所以最终肯定是会慢慢都转移到asp.net core上来。但是这需要一个比较久的过程。因为从asp.net mvc5转移到asp.net core需要一定时间的学习,即使在国外也需要一定过程。而国内由于语言环境、开发工具(需要VS2015才能进行asp.net core的开发)等的原因,肯定需要更久。国内的技术一直以来也比较保守。如果单纯的以在国内找个开发的工作的话,建议先熟悉下asp.net mvc5。如果确实有跨平台的需求,或者团队成员都对新技术有很高的热情,从事的也是全新的项目的话,就使用asp.net core吧www.zgxue.com防采集请勿采集本网。

Intro

之前使用的验证码服务是用的极验验证,而且是比较旧的,好久之前接入的,而且验证码服务依赖 Session,有点不太灵活,后来发现腾讯也有验证码服务,而且支持小程序,并且是唯一支持小程序的验证码。。(垄断么。。)

微软的东西都是入门比较简单的,你可以先看一下基本的C#,html就可以用Visual Studio来做了

而且相比之下,腾讯验证码不需要依赖 Session,集成起来也比较方便,于是就用了腾讯验证码,详细参考:https://007.qq.com/product.html?ADTAG=index.block

这个吧,可能有些东西你不太理解造成的。关于性能提升的问题,net core是否性能提升10倍?答案是还真差不多!为什么呢?这是因为.net core为了跨平台,编译的方式使用的是dotnet publish-r 版本

验证流程

重要的是.NET Core和ASP.Net添加‘go live’协议,允许用户在生产环境部署,可以反馈在生产环境是如何运作的。并且,现在.Net Core已经完全支持Mac,Linux和Windows三个平台,特性都已完整。

服务器端接入

服务器文夹没有权限

我也学的这个 3个月前 我的台式配置:cpu:赛扬1.73G 内存:256M,硬盘:40G vs2005,sql server 酷睿双核1.83G 2G内存 如果你买Dell的推荐Dell Inspiron 1520 6000元 比我的1420配置高一个档次

using System.ComponentModel.DataAnnotations;using System.Net.Http;using System.Threading.Tasks;using Microsoft.Extensions.Logging;using Microsoft.Extensions.Options;using Newtonsoft.Json;using WeihanLi.Extensions;namespace ActivityReservation.Common{ public class TencentCaptchaOptions { /// <summary> /// 客户端AppId /// </summary> [Required] public string AppId { get; set; } /// <summary> /// App Secret Key /// </summary> [Required] public string AppSecret { get; set; } } public class TencentCaptchaRequest { /// <summary> /// 验证码客户端验证回调的票据 /// </summary> public string Ticket { get; set; } /// <summary> /// 验证码客户端验证回调的随机串 /// </summary> public string Nonce { get; set; } /// <summary> /// 提交验证的用户的IP地址(eg: 10.127.10.2) /// </summary> public string UserIP { get; set; } } public class TencentCaptchaHelper { private class TencentCaptchaResponse { /// <summary> /// 1:验证成功,0:验证失败,100:AppSecretKey参数校验错误 /// </summary> [JsonProperty("response")] public int Code { get; set; } /// <summary> /// 恶意等级 [0, 100] /// </summary> [JsonProperty("evil_level")] public string EvilLevel { get; set; } /// <summary> /// 错误信息 /// </summary> [JsonProperty("err_msg")] public string ErrorMsg { get; set; } } private const string TencentCaptchaVerifyUrl = "https://ssl.captcha.qq.com/ticket/verify"; private readonly TencentCaptchaOptions _captchaOptions; private readonly ILogger _logger; private readonly HttpClient _httpClient; public TencentCaptchaHelper( IOptions<TencentCaptchaOptions> option, ILogger<TencentCaptchaHelper> logger, HttpClient httpClient) { _captchaOptions = option.Value; _logger = logger; _httpClient = httpClient; } public async Task<bool> IsValidRequestAsync(TencentCaptchaRequest request) { // 参考文档:https://007.qq.com/captcha/#/gettingStart var response = await _httpClient.GetAsync( $"{TencentCaptchaVerifyUrl}?aid={_captchaOptions.AppId}&AppSecretKey={_captchaOptions.AppSecret}&Ticket={request.Ticket}&Randstr={request.Nonce}&UserIP={request.UserIP}"); var responseText = await response.Content.ReadAsStringAsync(); if (responseText.IsNotNullOrEmpty()) { _logger.Debug($"Tencent captcha verify response:{responseText}"); var result = responseText.JsonToType<TencentCaptchaResponse>(); if (result.Code == 1) { return true; } } return false; } }}

Startup 配置:

services.AddHttpClient<TencentCaptchaHelper>(client => client.Timeout = TimeSpan.FromSeconds(3)) .ConfigurePrimaryHttpMessageHandler(() => new NoProxyHttpClientHandler());services.AddTencentCaptchaHelper(options =>{ options.AppId = Configuration["Tencent:Captcha:AppId"]; options.AppSecret = Configuration["Tencent:Captcha:AppSecret"];});

前端接入

前端接入这里不作多介绍了,接入方式多种多样,具体可以参考官方文档:https://cloud.tencent.com/document/product/1110/36841

下面的代码是 angular spa 在前端接入的核心代码

private loadCaptcha(): void { var tCaptcha = document.getElementById("tCaptcha"); if (tCaptcha) { this.InitCaptcha(); return; } let script = <any>document.createElement('script'); script.id = "tCaptcha"; script.type = 'text/javascript'; script.src = "https://ssl.captcha.qq.com/TCaptcha.js" if (script.readyState) { //IE script.onreadystatechange = () => { if (script.readyState === "loaded" || script.readyState === "complete") { this.InitCaptcha(); } }; } else { //Others script.onload = () => { this.InitCaptcha(); }; } document.getElementsByTagName('body')[0].appendChild(script); } private InitCaptcha(): void { let captchaDom = document.getElementById('TencentCaptcha1'); if (!captchaDom) { return; } this.tencentRecaptcha = new TencentCaptcha( captchaDom, appId, (res) => { this.captchaValid = false; console.log(res); // res(用户主动关闭验证码)= {ret: 2, ticket: null} // res(验证成功) = {ret: 0, ticket: "String", randstr: "String"} if (res.ret === 0) { this.captchaInfo.nonce = res.randstr; this.captchaInfo.ticket = res.ticket; this.captchaValid = true; this.tencentRecaptcha.destroy(); let button = <HTMLElement>document.getElementById("btnSubmit"); button.click(); } } ); console.log(`captcha inited`); this.tencentRecaptcha.show(); }

使用效果:

老版网站接入效果:

Reference

https://github.com/WeihanLi/ActivityReservation

https://reservation.weihanli.xyz/Home/Reservate

https://reservation-client.weihanli.xyz/reservation/new

https://cloud.tencent.com/document/product/1110/36841

不一样ASP.NET Core 是一个用于net程序跨平台的框架,在它的基础上会重写.NET Framework(windows)、Mono(Linux),以实现所有net程序、网站的跨平台ASP.net 是一种e68a84e799bee5baa6e79fa5e9819331333361326364微软推出的网站开发技术 目前一般分为 asp.net webform、asp.net mvc 两种ASP.NET Core 1.0 是一个开源跨平台的开发框架,用于构建基于云的现代 Web 应用。它是从底层开始重新构建来提供性能优良的Web应用开发框架,可以部署在云上或者本地服务器上。另外,它使得 ASP.NET 应用更加精简和模块化(可以根据你的应用需要向里面添加其他模块),跨平台(你可以很容易的在 Windows,Mac or Linux 上开发和部署你的应用),云优化(你可以在云上在云上部署和调试你的应用)。ASP.NET又称为ASP+,不仅仅是ASP的简单升级,而是微软公司推出的新一代脚本语言。ASP.NET基于.NET Framework的Web开发平台,不但吸收了ASP以前版本的最大优点并参照Java、VB语言的开发优势加入了许多新的特色,同时也修正了以前的ASP版本的运行错误。[1-2]ASP.NET具备开发网站应用程序的一切解决方案,包括验证、缓存、状态管理、调试和部署等全部功能。在代码撰写方面特色是将页面逻辑和业务逻辑分开,它分离程序代码与显示的内容,让丰富多彩的网页更容易撰写。同时使程序代码看起来更洁净、更简单内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • asp.net core使用skiasharp实现验证码的示例代码
  • asp.net防止页面刷新的两种解决方法小结
  • asp.net中word转html的办法(不需要word组件)
  • .net开发基础:从简单的例子理解泛型 分享
  • .net中读取excel文件的数据及excelreader应用
  • asp.net微信开发(高级群发文本)
  • .net core中httpclient的正确打开方式
  • entity framework之db first方式详解
  • asp.net使用httpmodule压缩并删除空白html请求的实现代码
  • c#.net 微信公众账号接口开发
  • aspnetpager控件的最基本用法
  • ASP.net core是什么,和ASP.net一样吗?
  • 请问:ASP.net mvc5和asp.net.core有什么区别呢?在今后的发展中这个前景怎么样?
  • 如何评价asp.net core
  • 如何在ASP NET Core中实现CORS跨域
  • 没有基础可以学 asp.net core吗?
  • asp.net core mvc 是不是未包含使用UA 动态选择displayModel
  • vs2017 asp.net core 启动异常
  • asp.net core 上传文件服务器拒绝是为什么?
  • 最近想买台本本。用来c#asp.net2.0web编程。。可是面对众多酷睿产品。不知如何下手。
  • Asp.Net Core 设置 .html 页为起始页
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net实用技巧asp.net core使用skiasharp实现验证码的示例代码asp.net防止页面刷新的两种解决方法小结asp.net中word转html的办法(不需要word组件).net开发基础:从简单的例子理解泛型 分享.net中读取excel文件的数据及excelreader应用asp.net微信开发(高级群发文本).net core中httpclient的正确打开方式entity framework之db first方式详解asp.net使用httpmodule压缩并删除空白html请求的实现代码c#.net 微信公众账号接口开发aspnetpager控件的最基本用法java正则表达式 pattern和matche未将对象引用设置到对象的实例 (asp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net汉字转拼音和获取汉字首字asp.net对路径"xxxxx"asp.net textbox的技巧使用.net/c# memcached缓存获取所有缓存键的方asp.net数据绑定之datalist控件实战篇如何实现listview高效分页代码visual studio 2010崩溃重启问题(源文件编asp.net身份验证方式介绍.net发起web请求时维持session轻松解决asp.net用户aspnet登录失败问题的linq to xml的编程基础.net自定义事件示例分享
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved