平时我们看一些网页的时候会发现这样的功能:有的页面只能在微信里访问,如果在电脑上访问就只显示当前地址的二维码。这个用C#怎么实现呢?我们结合代码来看看。

首先,我们需要先判断用户使用的是什么浏览器,这需要用到 Request.UserAgent 属性,通过捕捉微信浏览器和普通浏览器的UserAgent会发现它们的区别,下面是几款常用浏览器的UserAgent:

微信浏览器:Mozilla/5.0(Linux;U;Android 4.4.2;zh-cn;2013022 Build/HM2013022)AppleWebKit/533.1(KHTML,like Gecko)Version/4.0MQQBrowser/5.4 TBS/025438 Mobile Safari/533.1 MicroMessenger/6.2.0.54_r1169949.561 NetType/WIFI Language/zh_CN

火狐:Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0

IE11:Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko

谷歌浏览器:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36

对比上面4个浏览器的UserAgent可以发现,微信浏览器的UserAgent最关键的就是包含上面标红色的MicroMessenger ,所以我们可以据此来判断用户是否使用了微信浏览器:

        string userAgent = Request.UserAgent;if (userAgent.ToLower().Contains("micromessenger")){Response.Write("欢迎您在微信中访问我。");}else{Response.Write("请在微信中访问本页。");}

到此我们实现了判断用户是否使用了微信浏览器,下面开始第二步:在非微信浏览器访问时生成二维码。

C#生成二维码有一个非常好用的插件:ThoughtWorks.QRCode 。它的使用非常简单,我们从官网上下载ThoughtWorks.QRCode.dll之后,引用到我们的项目里,然后在页面中引入ThoughtWorks.QRCode.Codec 命名空间,接下来就可以操作生成二维码了:

/// <summary>/// 生成二维码/// </summary>private void CreateQRCode(){string enCodeString = Request.Url.ToString();QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高)qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)string filename = Request.Url.ToString().Replace("/", "").Replace("\\", "").Replace(".", "").Replace(":", "").Replace("?", "").Replace("&", "") + ".jpg";string path = Server.MapPath("~/qrcode/");if (!File.Exists(path + filename)){Bitmap bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);if (!Directory.Exists(path))Directory.CreateDirectory(path);bt.Save(path + filename);}string html = "<img src='qrcode/" + filename + "' width='330px' height='330px'/>";html += "<h3>该内容仅限在微信浏览器下阅读!请用微信扫描,打开此页面!</h3>";divQRCode.InnerHtml = html;}

页面上有一个div来显示二维码提示。

    <div id="viewQRCode" runat="server" style="text-align:center;">        </div>

修改上面判断微信浏览器的代码:

        string userAgent = Request.UserAgent;if (userAgent.ToLower().Contains("micromessenger")){            <pre name="code" class="csharp">            Response.Write("欢迎您在微信中访问我。");}else{CreateQRCode();}

到这里就大功告成了,我们来看下在普通浏览器和微信浏览器上浏览这个页面的不同效果:

在普通浏览器上访问的效果

用微信扫描访问的效果

C#判断用户是否使用微信浏览器,并据此来显示真实内容或二维码相关推荐

  1. 手机移动端-纯js浏览器h5调用摄像头扫描识别解析 条形码+二维码

    一.场景 手机移动端-原生js 浏览器h5 解决 识别二维码 条形码功能: 不借助Hbuilder.需要自己打包成APP,比如用Hbuilder打包,浏览器端项目h5 无打包成app部署 X 不采用 ...

  2. java实现微信支付宝等多个支付平台合一的二维码支付(SSM框架)

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听java实现微信支付宝等多个支付平台合一的二维码支付(SSM框架) 整体思路: 实现微信支付宝等支付平台合多为一的二 ...

  3. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)

    首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...

  4. java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)...

    首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...

  5. 微信公众号怎么生成能追踪效果的二维码?

    微号帮平台微信渠道二维码功能介绍:为了满足用户渠道推广分析的需要,微信公众平台提供了生成带参数二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,微信公众号可以接收到事件推送. 现在 ...

  6. 微信H5实现网页长按保存图片及识别二维码

    实现微信H5实现网页长按保存图片及识别二维码 使用工具 html2canvas 官方文档 html2canvas.hertzen.com/ canvas2image github.com/hongru ...

  7. 随便记录一下:微信公众号后台管理系统,获取需要扫描的二维码

    今天心血来潮,看了一下微信扫码登陆.这里记录一下,重申一下–做事需要耐心!!! 微信公众号官网:mp.weixin.qq.com 我们需要分析的是二维码图片如何拿到了,当然,强大的f12绝对可以, 拿 ...

  8. 微信小程序Megalo开发踩坑计-普通二维码绑定

    原文首发于http://blog.yumengtao.top 首先简单说一下普通二维码绑定功能作用: 兼容线下已有的二维码 能同时支持微信.支付宝小程序 小程序启动传参 微信小程序普通二维码资料 支付 ...

  9. 实例:用C#.NET手把手教你做微信公众号开发(12)--带参数二维码裂变推广

    为什么能裂变推广是营销学和心理学的范畴了,这里举个简单的例子来介绍.公众号有足以吸引粉丝的地方,要么是知识.要么是优惠.要么是服务,反正不同于其他人,能够吸引人关注:有了这个前提,怎么让更多的人知道这 ...

最新文章

  1. DSP集成开发工具CCS的Git工具使用说明(三)
  2. FPGA的内部组成结构
  3. .NET: 使用.NET Core CLI开发应用程序
  4. (c语言)和与积的运算第三篇
  5. Java-逻辑运算符、位运算符
  6. Nginx学习总结(11)——提高Nginx服务器的安全性,稳定性和性能的12种技巧
  7. 折叠list ExpandableList+ BaseExpandableListAdapter 自定义 折叠列表
  8. 批处理脚本:判断进程是否存在
  9. 一步到位,用SQL检索ElasticSearch
  10. Java多线程深度探索
  11. 查看linux系统显卡型号
  12. mysql 空格显示问号_空格变成问号
  13. 各版本最新的Visual C++可再发行组件包(Redistributable Package)下载和合集
  14. access_token is invalid or not latest rid?
  15. 在公司里如何写好一封电子邮件
  16. 一车abs线路怎么量_abs传感器怎么测量好坏
  17. 再深谈TCP/IP三步握手四步挥手原理及衍生问题—长文解剖IP
  18. 什么是高维组合特征?
  19. 强大无比!百度文库、音视频下载、商品历史价…一行命令满足你的各种需求...
  20. java:枚举类使用

热门文章

  1. XUGU:利空频传,建网站如何去赚钱?
  2. 跑道标识和那些复杂的灯光系统 and 简介、编号、参数、标志及数量 and 飞机跑道标准与参数...
  3. cocos creator切换场景闪退_#Cocos Creator# 为什么音乐音效在场景切换的时候自动停止了?...
  4. mapbox-gl加载带环境贴图白模(视频)
  5. GAMIT安装报错:Type mismatch / Rank mismatch
  6. UPC 小澳的葫芦 (最短路+01分数规划 )
  7. 计算机虚拟机安装教程,教你电脑安装虚拟机教程
  8. 一小时建立终生受用的阅读操作系统-笔记
  9. springbootTest为什么整合dubbo后无法使用
  10. 31、查询 1990 年出生的学生名单