说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

ASP.NET如何用C#代码检测手机浏览器

HTML文档下载 WORD文档下载 PDF文档下载
在建设一个网站时,如果同时面向手机与桌面用户,为了使手机用户得到更佳的访问体验,我们需要检测浏览器类型,将手机浏览器的访问转到手机专门的页面。

 

在建设一个网站时,如果同时面向手机与桌面用户,为了使手机用户得到更佳的访问体验,我们需要检测

浏览器类型,将手机浏览器的访问转到手机专门的页面,我们用C#通过正则表达式来实现:

 

 

创建正则表达式

 

 

Regex b = new Regex(@"android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);

Regex v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|e\\-|e\\/|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\\-|2|g)|yas\\-|your|zeto|zte\\-", RegexOptions.IgnoreCase | RegexOptions.Multiline); 

 

为了执行这些代码,请参考下面的步骤:
1. 添加命名空间 
using System.Text.RegularExpressions;
2. 在page Load事件中,这样处理:
string u = Request.ServerVariables["HTTP_USER_AGENT"];
Regex b = new Regex(@"android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);
Regex v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|e\\-|e\\/|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\\-|2|g)|yas\\-|your|zeto|zte\\-", RegexOptions.IgnoreCase | RegexOptions.Multiline);
if ((b.IsMatch(u) || v.IsMatch(u.Substring(0, 4))))
{
Response.Redirect("手机浏览页面");
}
else
{
// 正常页面
}
代码中我们根据HTTP_USER_AGENT,用正则表达式来判断是否是手机在访问,这样当你用手机来浏览你的应用时,将直接转到手机页面。

 

《近匠》第05期:移动开发工具访谈,个推——有节操的push 【Hadoop技术博客推荐】Hive的那些事 Twitter联合创始人推社交搜索应用Jelly 马云“食言”进军手游分成比例8:2,开发者可拿7成 CodeCombat游戏全面开源:玩游戏也能学编程 Netflix首席云架构师Adrian Cockcroft加盟Battery Ventures Android 4.3附体:RIBX发布FB/Ti 互联网手表 IE11界面布局的秘密武器:Quero Toolbar 【开源专访】Node-Webkit作者王文睿:桌面应用的全新开发方式 CentOS归属红帽:企业级Linux领域社区与商业的融合 印度初创公司Little Eye Labs证实已被Facebook收购 雅虎收购Aviate:重在提升用户体验 SDN领域硝烟再起,Oracle将Corente收入囊中 Hadoop科普文——常见的45个问题解答 CES 2014:奥迪下一代汽车将采用NVIDIA的芯片! Cocos 3.0 Beta发布:更易用、更友好 开拓新兴市场?诺基亚或推Android手机,UI界面遭泄露 预测2014大数据值得关注的8个发展方向 霸主地位再临挑战?Salesforce CEO,我们不只有Oracle LBS应用新星、“司机好助手”微车借力移动互联网,志在打造车主的个人移动门户 新一代IDE Light Table开源:让编程工作更简单 图片应用也能高大上,看Cooliris如何玩转无人机 拥抱Spark,机遇无限——Spark Summit 2013精彩回顾 1月10日:改变世界的iPhone七岁了,你是传奇! 同洲电子推出首款手机操作系统960OS 免费授权使用 如何在Windows 8.1的IE11中打开同步选项卡? 25年老对手评价微软:换CEO可行,但是太迟了 【PPT集萃】十位一线专家分享Spark现状与未来(三) 万元奖品等你拿!2014创客118新年大Party! Firefox OS的2013回顾和2014展望 Strom8 CEO:搞好手游开发,合伙人很重要 如何实现5M以上的文件的上传 从windows进入unix Oracle 中文输入 是否onkeypress和onkeydown不能同时使用呀? Delphi 5下要做一个多 Y 轴的曲线图形,如何实现? 哪有xteamlindows下载?? 万分感谢!!!!! borland 会不会出一个 C# Builder? 乱码,头大了,不知道为什么pb导入excel怎么办 数据统计问题,请大侠门帮忙!急急急!!! 求解ZModem通讯协议源程序----有谁用过CZModemCore 我也不知道对不对! 最高级的问题?搞一个专业的VC程序员基地~~~~~~ 在研究directshow filter的push模式的兄弟请进 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了 有两个问题,每题40分,马上给分!!!! 如何使用打印机? 在爱情方面谁能做到这一点? 谁有 file cutter v1.4的注册码? 有急用! 搞一个专业的VC程序员基地~~~~~~谁愿意加入????? 最新发现:原来C++Bilder的项目文件(.bpr)是XML格式的! 关于FAT32和NTSF的问题 如何用VC实现Email的发送? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了! 搞一个专业的VC程序员基地~~~~~~需要网页制作高手!! ADO 的用法 m_pRecordset->Fields->GetItem(index)->GetName() 关于CRichEditCtrl的问题之二,取的当前可见行数? 请问在哪里下载IMAIL SERVER???各位帮帮忙!!! 高手请回答,ADO和BDE到底有什么区别,你选择谁?为什么? 高分求教!!!!!!!!!!!!!!!!怎样得到局域网上所有的机器名?(普通WINDOWS网络,用VB?,好象用WNET API可以的) 如何安装com.ibm.bridge2java.*这个包阿? 有人吗???求救! 你也许也会遇到这样的问题? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!!! 大虾看过来. 一个access表一万条记录,想转到Mysql下(Mysql在Linux下)用什么方法和什么语言来做好? rs.CursorLocation=aduseclient是什么东西? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题! 简单SQL,免费送分! 用ASP如何上传文件,可以用组件。 谁知道怎么改运行中的程序的托盘图标???我用SysTray.ocx不能改? 新手提问,简单题目,大量给分~~~~~~~~~~ 如何使用getdispatch(), 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!! 关于在一个窗口中的多个数据窗口的问题 扔块砖头, 开个场子 。 ( yeti_lee ) 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了? To: baicolt(五岁的小新是我师傅) 有没有人用过Jcreator 如何在sql server 的查询分析器中用sql语句转到另一台机器上的数据库,同样了sql server的 是不是MSHFlexGrid的bug? 李叔叔家种粮食作物8分之3公顷,种油料作物0.21公顷,种经济作物5分之1公顷.哪种面积大 一张地图的比例尺1比200表示图上的什么表示实际距离的 6吨等于多少克 某县耕地面积约80万公顷,2005年粮食作物与经济作物的面积比是7:3,到今年将调整为6 :4哪一种作物的生产规模扩大了,扩大了多少万公顷.请回答完整要算式并解答 一幅地图的比例尺是200:1,图上120厘米表示实际距离是()米一幅地图的比例尺是200:1,图上120厘米表示实际距离是( )米 一根绳子第一次用了全长的1/4,又用了5/2米,这时已用的/剩下的=2/3,绳子长多少米 5π等于多少 华北平原种植的粮食作物以什么为主 一根绳子第一次用去全长的1/5,第2次用去3/5米,两次共用去这根绳子的1/2.这根绳子长多少米? 5+5等于多少 华北平原的主要粮食作物是什么?1.水稻 2.大豆 3.高粱 4.小麦 上海到杭州的实际距离大约是150千米,在一副比例尺是1:3000000的地图上,两地之间的距离是多少厘米?随便帮我把答案算出 若大气压为1.01*10的5次要方Pa,水平屋顶面积为100平方米,则大气压对水平屋顶上表面压力为多少N 华北平原的主要粮食作物是? 在一幅比例尺为1:3000000的地图上量得上海到杭州的距离为5cm,把它改画在比例尺为1:5000000的地图上,上海到杭州的图上距离是多少厘米?(如果不会,不妨用方程试试!) 大气压多少Pa 你知道华北平原的人们种植的主要农作物有哪些?你的判断依据是什么? 在一幅比例尺是1比5000000的地图上,量的上海到杭州的距离是3.4厘米.上海到杭州的实际距离是多少? 一根绳子减去20%后又接上5米,比原来断20分之3,则现在绳子多少米 4*7等于多少? 在一幅比例尺是1:5000000的地图上,量得上海到杭州的距离是3.4cm.上海到杭州的实际距离是多少 等于几? 请问1mbar等于多少kpa 在一幅比例尺为1:3000000的地图上量得上海到杭州的距离为5cm,把它改画在比例尺为1:500000的地图上 总压为1个大气压的体系,含50%氧气和50%氮气.问氧气的压强为多少? 200磅等于多少KPA 700米 800米等于多少吨? 当氮气大量增加会改变空气吗?会影响大气压吗?吃的面包包装是那种充气式的,一撕开袋子气体唰得一下全跑了出来,袋子就变瘪了.上网查了一下,像薯片、面包这种充气式包装充的一般是氮气. 100升等于几千克 15米长的绳子,用去五分之二,还剩()米?一根绳子,用去五分之三米,还剩12米,这个绳子()米?一根绳子,用去四分之三,正好用去15米,还剩()米? 6升150兆帕的氮气等于多少大气压 5060克等于几千克几克 在一幅比例尺是1:8000000的地图上.量得A、B两地之间的距离是3厘米.A、B两地间的实际距离是().A.80千米 B.2400千米 C.240千米 容积为20升的钢瓶中,装有150个大气压的氧气,现将氧气在等温条件下分装到容积为5L的氧气袋中,氧气袋原来是真空的,要求每袋氧气均达到10个大气压,设分装时无漏气,则最多可装几袋 压强1Pa等于多少克的压力 一幅地图上的比例尺是1:2000000,把它改写成线段比例尺是( ),在这幅地图上量得A、B两地的距离是15厘米一幅地图上的比例尺是1:2000000,把它改写成线段比例尺是( ),在这幅地图 如果空气中的氧气都没了那么大气压是多少为什么? 1200克等于几千克几克 一根绳子,先用去40米,有用去余下长度的五分之二,这时余下的绳子正好是原来总长度的三分之一.这根绳子原来长多少米?(不要用两边都有X的方程) 有2根绳子共长63米,减去第一根的3/5和第二根的7/9,还余下共22米,第一根长多少米? 在一幅比例尺是1:200000的地图上,量得甲、乙两地距离20厘米.如果在另一幅地图上,甲、乙两地距离8厘米.另一幅地图的比例尺是多少 在比例尺是1:3000000的地图上,量得两地的距离是6cm.甲、两辆汽车同时相向开出,4小时后相遇.已知甲、乙两车的速度比为4:5,求甲、乙两车每小时各行多少千米? 一幅地图的比例尺是1:30000,说明图上距离是实际距离的什么,实际距离是图上距离 什么倍,图上1cm的距离表示实际距离( )m. 许伯伯承包了2公顷土地,他把其中一半用来种植棉花,棉花的种植面积是多少平方米?还有一道:一个储水器中装有2m³纯净水,如果把这些水分撞到容积为10升的水桶中,可以装多少桶? 在一幅地图上,比例尺为1:300000,量得A、B两地的距离为18厘米,则A、B两地的实际距离()千米 下面是某农场各种农作物种植面积的统计图,看图回答问题:己知粮食作物比经济作物多312公顷,这个农场一共有耕地多少公顷?三种作物各种植多少公顷?(粮食占总数的60%,其他作物占6%,经济 许伯伯承包2公顷土地,他把其中一半用来种棉花,棉花的种植面积是多少平方米? 1十1等于多少 一根绳子,第一次用去全长的15%,第一次用去全长的25%,还剩下8.4米.这根绳子原来长多少米?判断,打√,×.1、女生和男生人数的比是4:5,女生人数比男生少25%.( ) 2、甲数是乙数的2倍,那么甲 一根绳子长60米,第一次用去1/3,第二次用去1/4米,还剩()米 要过程 请问:工作压力:10Kg/cm2 (十千克每平方厘米)等于多少KPa怎么换算的 1pa等于多少公斤 一根绳子长100分米第一次用去3分米;第二次用去40分米;还剩多少米 0.02kg/cm2等于多少kpa?最好说明详细计算方法, 某地的大气压为1.0*10^5Pa,这个大气压可以支持多高的水柱?要写出计算过程``! 1pa等于多少牛每平方米 一条绳子长15分米,第一次减去他的1/3,第二次减去它的1/2,还剩多少米 大气压在哪里为0 1pa等于多少每平方厘米多少克 7磅 多少克
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn