asp.net 检测访问者是iphone,android,web(摘录)
aps.net
可以使用WebFormViewEngine来实现。
参考文章:http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx
源代码
- public class MobileCapableWebFormViewEngine : WebFormViewEngine
- {
- public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
- {
- ViewEngineResult result = null;
- var request = controllerContext.HttpContext.Request;
- //This could be replaced with a switch statement as other advanced / device specific views are created
- if (UserAgentIs(controllerContext, "iPhone"))
- {
- result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);
- }
- // Avoid unnecessary checks if this device isn't suspected to be a mobile device
- if (request.Browser.IsMobileDevice)
- {
- if (UserAgentIs(controllerContext, "MSIEMobile 6"))
- {
- result = base.FindView(controllerContext, "Mobile/MobileIE6/" + viewName, masterName, useCache);
- }
- else if (UserAgentIs(controllerContext, "PocketIE") && request.Browser.MajorVersion >= 4)
- {
- result = base.FindView(controllerContext, "Mobile/PocketIE/" + viewName, masterName, useCache);
- }
- //Fall back to default mobile view if no other mobile view has already been set
- if ((result == null || result.View == null) &&
- request.Browser.IsMobileDevice)
- {
- result = base.FindView(controllerContext, "Mobile/" + viewName, masterName, useCache);
- }
- }
- //Fall back to desktop view if no other view has been selected
- if (result == null || result.View == null)
- {
- result = base.FindView(controllerContext, viewName, masterName, useCache);
- }
- return result;
- }
- private bool UserAgentIs(ControllerContext controllerContext, string userAgentToTest)
- {
- return (controllerContext.HttpContext.Request.UserAgent.IndexOf(userAgentToTest, StringComparison.OrdinalIgnoreCase) > 0);
- }
- }
public class MobileCapableWebFormViewEngine : WebFormViewEngine {public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache){ViewEngineResult result = null;var request = controllerContext.HttpContext.Request;//This could be replaced with a switch statement as other advanced / device specific views are createdif (UserAgentIs(controllerContext, "iPhone")) {result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);}// Avoid unnecessary checks if this device isn't suspected to be a mobile deviceif (request.Browser.IsMobileDevice){if (UserAgentIs(controllerContext, "MSIEMobile 6")){result = base.FindView(controllerContext, "Mobile/MobileIE6/" + viewName, masterName, useCache);}else if (UserAgentIs(controllerContext, "PocketIE") && request.Browser.MajorVersion >= 4){result = base.FindView(controllerContext, "Mobile/PocketIE/" + viewName, masterName, useCache);}//Fall back to default mobile view if no other mobile view has already been setif ((result == null || result.View == null) &&request.Browser.IsMobileDevice){result = base.FindView(controllerContext, "Mobile/" + viewName, masterName, useCache);}}//Fall back to desktop view if no other view has been selectedif (result == null || result.View == null){result = base.FindView(controllerContext, viewName, masterName, useCache);}return result;}private bool UserAgentIs(ControllerContext controllerContext, string userAgentToTest){return (controllerContext.HttpContext.Request.UserAgent.IndexOf(userAgentToTest, StringComparison.OrdinalIgnoreCase) > 0);} }
启用该引擎的使用方法:
- protected void Application_Start()
- {
- AreaRegistration.RegisterAllAreas();
- RegisterRoutes(RouteTable.Routes);
- ViewEngines.Engines.Add(new MobileCapableWebFormViewEngine());
- ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
- CronScheduler.Instance.startUp();
- }
asp.net 检测访问者是iphone,android,web(摘录)相关推荐
- ASP.NET 4 和 Visual Studio 2010 Web 开发概述
声明:本文是ASP.NET 白皮书 ASP.NET 4 and Visual Studio 2010 Web Development Overview 的阅读摘要,只是本人的学习记录,并非完整翻译,仅 ...
- Android Web应用高级编程
为什么80%的码农都做不了架构师?>>> 基本信息 原书名: Pro Android Web Apps: Develop for Android using HTML5, CS ...
- iPhone X Web 设计
iPhone X Web 设计 原文地址:https://webkit.org/blog/7929/designing-websites-for-iphone-x/ 开箱即用(开发者无需进行任何设置) ...
- 仿微信的IM聊天时间显示格式(含iOS/Android/Web实现)[图文+源码]
本文为原创分享,转载请注明出处. 1.引言 即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成"年/月/日 时: ...
- iphone android 开发指南 http://mobile.tutsplus.com
非常好的教程 iphone& android 开发指南 http://mobile.tutsplus.com/category/tutorials/iphone/ http://mobile. ...
- 使用ASP.Net 3.5 的Ajax与Web服务开发实例
本文继续介绍使用ASP.NET3.5中的AJAX环境中如何从客户端JavaScript调用Web服务方法.编写本文的目的在于让大家深刻了解基于ASP.Net3.5的Ajax和Web的服务,虽然例子比较 ...
- 测试用html文件是否存在,ASP如何检测某文件夹是否存在,不存在则自动创建
直接给大家分享一下脚本之家测试正常可以使用的代码,并且支持多级目录创建 代码一 Function CreateMultiFolder(ByVal CFolder) Dim objFSO, PhCrea ...
- 【视频教程】使用 ASP.NET Core 3.x 构建 RESTful Web API 已完结
使用 ASP.NET Core 3.x 构建 RESTful Web API 的视频教程已经完结,共50讲,约10.5小时. B站可看,点击原文链接. 度娘盘可下载完整视频: https://pan. ...
- 使用Http-Repl工具测试ASP.NET Core 2.2中的Web Api项目
今天,Visual Studio中没有内置工具来测试WEB API.使用浏览器,只能测试http GET请求.您需要使用Postman,SoapUI,Fiddler或Swagger等第三方工具来执行W ...
最新文章
- pythonurllib模块-python模块之urllib
- CentOS7 设置开机直接进入命令行界面
- mule 基于wsdl调用cxf web service
- Facade与Mediator模式的区别
- 【转】ofbiz数据库表结构设计
- 2017西安交大ACM小学期数据结构 [分块、二维矩阵]
- 数据挖掘学习指南!!
- linux启动过程中内核拷贝,轻松识破linux内核启动过程中的“”套路“”
- linux新手常用命令
- SpringBoot2.1.15(26) WebFlux快速上手——响应式Spring的道法术器
- 虚拟机 网卡模式配置
- python学习笔记之其它
- ai人工智能使用的软件_MachineRay:使用AI创造抽象艺术
- windows是第几代计算机,Win7一个月后将被官方淘汰!历代微软系统哪个是你的青春?...
- OpenCV总结——高斯核
- c语言数组中找出相同的数,找出数组中重复的数字(c语言)
- [Leetcode] 158. Read N Characters Given Read4 II - Call multiple times 解题报告
- 为文件添加everyone权限
- 以太坊源码分析(37)eth以太坊协议分析
- 计算机老师新年贺卡祝福语,新年贺卡祝福语老师大全