平时我们看一些网页的时候会发现这样的功能:有的页面只能在微信里访问,如果在电脑*问就只显示当前地址的二维码。这个用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.1MicroMessenger/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 ,所以我们可以据此来判断用户是否使用了微信浏览器:
1 string userAgent = Request.UserAgent;
2 if (userAgent.ToLower().Contains("micromessenger"))
3 {
4 Response.Write("欢迎您在微信中访问我。");
5 }
6 else
7 {
8 Response.Write("请在微信中访问本页。");
9 }
到此我们实现了判断用户是否使用了微信浏览器,下面开始第二步:在非微信浏览器访问时生成二维码。
C#生成二维码有一个非常好用的插件:ThoughtWorks.QRCode 。它的使用非常简单,我们从官网上下载ThoughtWorks.QRCode.dll之后,引用到我们的项目里,然后在页面中引入ThoughtWorks.QRCode.Codec 命名空间,接下来就可以操作生成二维码了:
1 /// <summary>
2 /// 生成二维码
3 /// </summary>
4 private void CreateQRCode()
5 {
6 string enCodeString = Request.Url.ToString();
7 QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
8 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;//编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字)
9 qrCodeEncoder.QRCodeScale = 10;//大小(值越大生成的二维码图片像素越高)
10 qrCodeEncoder.QRCodeVersion = 0;//版本(注意:设置为0主要是防止编码的字符串太长时发生错误)
11 qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;//错误效验、错误更正(有4个等级)
12
13 string filename = Request.Url.ToString().Replace("/", "").Replace("\\", "").Replace(".", "").Replace(":", "").Replace("?", "").Replace("&", "") + ".jpg";
14 string path = Server.MapPath("~/qrcode/");
15 if (!File.Exists(path + filename))
16 {
17 Bitmap bt = qrCodeEncoder.Encode(enCodeString, Encoding.UTF8);
18 if (!Directory.Exists(path))
19 Directory.CreateDirectory(path);
20 bt.Save(path + filename);
21 }
22 string html = "<img src='qrcode/" + filename + "' width='330px' height='330px'/>";
23 html += "<h3>该内容仅限在微信浏览器下阅读!请用微信扫描,打开此页面!</h3>";
24 divQRCode.InnerHtml = html;
25 }
页面上有一个div来显示二维码提示。
1 <div id="viewQRCode" runat="server" style="text-align:center;">
2 </div>
修改上面判断微信浏览器的代码:
1 string userAgent = Request.UserAgent;
2 if (userAgent.ToLower().Contains("micromessenger"))
3 {
Response.Write("欢迎您在微信中访问我。");
4 }
5 else
6 {
7 CreateQRCode();
8 }
到这里就大功告成了,我们来看下在普通浏览器和微信浏览器上浏览这个页面的不同效果:
在普通浏览器*问的效果
用微信扫描访问的效果
C#判断用户是否使用微信浏览器,并据此来显示真实内容或二维码的更多相关文章
-
java实现微信支付宝等多个支付平台合一的二维码支付(maven+spring springmvc mybatis框架)
首先申明,本人实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis 框架,maven管理.其实如果支付,不需要my ...
-
Thinkphp利用微信多客服消息推送取货二维码消息
首先看微信官方的说法: 当用户主动发消息给公众号的时候(包括发送信息.点击自定义菜单.订阅事件.扫描二维码事件.支付成功事件.用户维权), 微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改 ...
-
微信蓝牙设备开发教程之获取设备deviceid和二维码(3)
文章转载地址 http://www.vxzsk.com/87.html 设备授权 调用 设备授权新接口 ,获取deviceid和二维码,然后利用获取到的deviceid更新设备属性(如mac地址, ...
-
微信开发之——Php批量生成带参数的二维码
带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个接口,那下面就来研究一下吧. 具体接口说明请参见,微信公众平 ...
-
微信小程序H5预览页面框架(二维码不隐藏)
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
-
asp.net 判断用户是否使用微信浏览器
平时我们看一些网页的时候会发现这样的功能:有的页面只能在微信里访问,如果在电脑*问就提示用户请到微信*问该网页.这个用C#怎么实现呢?我们结合代码来看看. 首先,我们需要先判断用户使用的是什么浏览 ...
-
H5分享到微信好友朋友圈QQ好友QQ空间微博二维码
这是分享按钮: <button onclick="call()">通用分享</button> <button onclick="call(' ...
-
用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)
本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...
-
Force.com微信开发系列(八)生成带参数的二维码
为了满足用户渠道推广分析的需要,公众平台提供了生成带二维码的接口.使用该接口可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送.目前有两种类型的二维码,分别是临时二维码和永久二维码 ...
随机推荐
-
Exchange管理界面
Exchange有三种管理方式,一个是通过Powershell命令行操作进行管理.Exchange自带的Powershell是在其基础上建的,加入了Exchange管理操作的函数,能够进行另外两种方式 ...
-
Zone.js 简介 &; 抛砖引玉
Zone.js是angular团队参照NodeJS的Domain,Dart的Zone,为angular 2开发的核心组件. 一开始,我对Zone.js是拒绝的.我们知道类似的 Domain 模块,主要 ...
-
HDU 4405 期望DP
期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...
-
ubuntu忘记密码,无法sudo的解决方法
想要安装一个sublime Text Editor,发现需要root权限,而且sudo用户的密码输进去没有作用!@ubuntu 14.04 LTS 这个时候怎么办呢? 打开终端,在终端中使用 sudo ...
-
iOS tableView的系统分割线定格设置以及分割线自定制
一.关于分割线的位置. 分割线的位置就是指分割线相对于tableViewCell.如果我们要根据要求调节其位置,那么在iOS7.0版本以后,提供了一个方法如下: if ([self.tableView ...
-
slowhttptest慢攻击工具介绍
slowhttptest介绍 Slowhttptest是依赖HTTP协议的慢速攻击DoS攻击工具,设计的基本原理是服务器在请求完全接收后才会进行处理,如果客户端的发送速度缓慢或者发送不完整,服务端为其 ...
-
linux:scp从入门到刚入门
[温馨提示] 此文和ssh配合食用更佳. 首先请小伙伴们连上你要传文件的那台机,用ssh可以免密登录. [传送文件] 我们一般发文件的话可以scp来发一发,比如说我现在要向多个扔很多tomcat包,我 ...
-
Java凝视分类
Java凝视分类 1.单行凝视 //打印结果 System.out.println("结果是:"+result); 2.多行凝视 /** * @autho ...
-
Linux中进程在前后台的切换
把进程放入后台执行 tar -zcf etc.tar.gz /etc &把进程放入后台暂停 在命令执行的过程中,按下ctrl+z 查看后台的命令 jobs[root@localhost tem ...
-
pageBean实现分页
PageBean类 package com.xujingyang.domain ; import java.util.List ; /** * @author oldmonk * @date 2017 ...