2011-09-12 38 views
1

我正在使用下面的方法来检查移动版本,但它并不总是适用于所有桌面浏览器,并且它不是IE版本的问题,因为有些机器具有IE9和它留在我的桌面版本和一些其他机器与IE9重定向到移动版本,当我应该总是从PC返回假和一些IE8用户发生相同移动检查方法在某些浏览器上不起作用

这种方法是否有任何例外?

 public static bool IsMobile() 
     { 
      //GETS THE CURRENT USER CONTEXT 
      HttpContext context = HttpContext.Current; 

      //FIRST TRY BUILT IN ASP.NT CHECK 
      if (context.Request.Browser.IsMobileDevice) 
      { 
       return true; 
      } 
      //THEN TRY CHECKING FOR THE HTTP_X_WAP_PROFILE HEADER 
      if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null) 
      { 
       return true; 
      } 
      //THEN TRY CHECKING THAT HTTP_ACCEPT EXISTS AND CONTAINS WAP 
      if (context.Request.ServerVariables["HTTP_ACCEPT"] != null && 
      context.Request.ServerVariables["HTTP_ACCEPT"].ToLower().Contains("wap")) 
      { 
       return true; 
      } 
      //AND FINALLY CHECK THE HTTP_USER_AGENT 
      //HEADER VARIABLE FOR ANY ONE OF THE FOLLOWING 
      if (context.Request.ServerVariables["HTTP_USER_AGENT"] != null) 
      { 
       //Create a list of all mobile types 
       string[] mobiles = { 
"midp", "j2me", "avant", "docomo", 
"novarra", "palmos", "palmsource", 
"240x320", "opwv", "chtml", 
"pda", "windows ce", "mmp/", 
"blackberry", "mib/", "symbian", 
"wireless", "nokia", "hand", "mobi", 
"phone", "cdm", "up.b", "audio", 
"SIE-", "SEC-", "samsung", "HTC", 
"mot-", "mitsu", "sagem", "sony" 
, "alcatel", "lg", "eric", "vx", 
"NEC", "philips", "mmm", "xx", 
"panasonic", "sharp", "wap", "sch", 
"rover", "pocket", "benq", "java", 
"pt", "pg", "vox", "amoi", 
"bird", "compal", "kg", "voda", 
"sany", "kdd", "dbt", "sendo", 
"sgh", "gradi", "jb", "dddi", 
"moto", "iphone" 
}; 

       //Loop through each item in the list created above 
       //and check if the header contains that text 
       foreach (string s in mobiles) 
       { 
        if (context.Request.ServerVariables["HTTP_USER_AGENT"].ToLower().Contains(s.ToLower())) 
        { 
         return true; 
        } 
       } 
      } 

      return false; 
     } 
+0

使用未经检查的用户代理嗅探,这样几乎可以保证给您带来误报和误报。用户代理字符串可以通过各种安装的软件进行扩展,并且您的支票过于宽泛。例如,“Avant”可能会触及桌面浏览器AvantBrowser,并且可以在UA字符串的扩展标记中找到几个其他双字符检查。我们已经看到这发生在野外。 – EricLaw

回答

0

好,我发现周围的工作 我增加了更多的检查

if (context.Request.UserAgent.ToLower().Contains("pc")) 
      { 
       return false; 
      } 
+0

你在哪里添加的?这将导致PocketPC的假阴性。 – EricLaw

1

如果我不需要使用的设备功能(normaly WURFL),然后我用这个code。也许你可以用这个正则表达式来完成你的代码。

相关问题