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.        }  
原文地址:https://www.cnblogs.com/lzjsky/p/2673211.html