65.9K
CodeProject 正在变化。 阅读更多。
Home

在 ASP.NET 中检测移动浏览器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.22/5 (15投票s)

2009年3月24日

CPOL
viewsIcon

235865

如何检测访问您 ASP.NET 网站的移动设备。

引言

一个简单的函数,用于检测用户访问您的网站时使用的是移动设备还是普通网页浏览器。

背景

这是我在 CodeProject 上的第一篇文章。这个网站上的文章在我的 .NET 学习过程中帮助了我很多。我希望这篇文章也能帮助到其他人。

我需要能够检测用户是从移动设备还是普通网页浏览器浏览,并重定向到网站的相应版本。我发现很少有可用的 ASP.NET 教程能够正常工作。因此,我决定将我在网上找到的几种不同的方法和语言选项组合成一个简单的 ASP.NET 方法。

Using the Code

它只是一个被调用的静态布尔方法,isMobileBrowser()

public static bool isMobileBrowser()
{
    //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 =
            new[]
                {
                    "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;
}

关注点

如您所见,上面的代码是用新的语法编写的。但是,它可以很容易地修改为适用于任何版本的 .NET。 вместо использования сокращенного инициализатора массива, используйте new string[] {} (вместо new[] {}).

© . All rights reserved.