zoukankan      html  css  js  c++  java
  • asp.net 检测访问者是iphone,android,web(摘录)

    aps.net
    可以使用WebFormViewEngine来实现。
    参考文章:http://www.hanselman.com/blog/MixMobileWebSitesWithASPNETMVCAndTheMobileBrowserDefinitionFile.aspx
    源代码

    C#代码 复制代码 收藏代码
    1. public class MobileCapableWebFormViewEngine : WebFormViewEngine   
    2. {   
    3.     public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)   
    4.     {   
    5.         ViewEngineResult result = null;   
    6.         var request = controllerContext.HttpContext.Request;   
    7.     
    8.         //This could be replaced with a switch statement as other advanced / device specific views are created   
    9.         if (UserAgentIs(controllerContext, "iPhone"))       
    10.         {   
    11.             result = base.FindView(controllerContext, "Mobile/iPhone/" + viewName, masterName, useCache);   
    12.         }   
    13.     
    14.         // Avoid unnecessary checks if this device isn't suspected to be a mobile device   
    15.         if (request.Browser.IsMobileDevice)   
    16.         {   
    17.             if (UserAgentIs(controllerContext, "MSIEMobile 6"))   
    18.             {   
    19.                 result = base.FindView(controllerContext, "Mobile/MobileIE6/" + viewName, masterName, useCache);   
    20.             }   
    21.             else if (UserAgentIs(controllerContext, "PocketIE") && request.Browser.MajorVersion >= 4)   
    22.             {   
    23.                 result = base.FindView(controllerContext, "Mobile/PocketIE/" + viewName, masterName, useCache);   
    24.             }   
    25.     
    26.             //Fall back to default mobile view if no other mobile view has already been set   
    27.             if ((result == null || result.View == null) &&   
    28.                             request.Browser.IsMobileDevice)   
    29.             {   
    30.                 result = base.FindView(controllerContext, "Mobile/" + viewName, masterName, useCache);   
    31.             }   
    32.         }   
    33.     
    34.         //Fall back to desktop view if no other view has been selected   
    35.         if (result == null || result.View == null)   
    36.         {   
    37.             result = base.FindView(controllerContext, viewName, masterName, useCache);   
    38.         }   
    39.     
    40.         return result;   
    41.     }   
    42.     
    43.     private bool UserAgentIs(ControllerContext controllerContext, string userAgentToTest)   
    44.     {   
    45.         return (controllerContext.HttpContext.Request.UserAgent.IndexOf(userAgentToTest, StringComparison.OrdinalIgnoreCase) > 0);   
    46.     }   
    47. }  
    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);
        }
    }



    启用该引擎的使用方法:

    C#代码 复制代码 收藏代码
    1. protected void Application_Start()   
    2.        {   
    3.            AreaRegistration.RegisterAllAreas();   
    4.   
    5.            RegisterRoutes(RouteTable.Routes);   
    6.   
    7.            ViewEngines.Engines.Add(new MobileCapableWebFormViewEngine());   
    8.   
    9.            ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());   
    10.   
    11.            CronScheduler.Instance.startUp();   
    12.   
    13.   
    14.        }  
  • 相关阅读:
    dt7.0中在sitemap.txt地图中新增热门搜索关键词记录
    dt7.0中加入站点地图(sitemap.txt)功能输出
    Spring基本功能-IOC
    Linux常见系统命令与文件操作
    Linux界面交互与目录结构
    Linux入门介绍
    学习Zookeeper需要了解的专业名词
    Zookeeper概述和基本概念
    使用Java操作MongoDB
    MongoDB的分布式部署
  • 原文地址:https://www.cnblogs.com/lzjsky/p/2673211.html
Copyright © 2011-2022 走看看