Click here to Skip to main content
Click here to Skip to main content

Detecting a mobile browser in ASP.NET

By , 24 Mar 2009
 

Introduction

A simple function to detect if a user vesting your site is on a mobile device or not.

Background

This is my first CodeProject article. The articles on this site have helped me out so much in learning .NET. I just hope this can help someone out as well.

I needed the ability to detect if a user was browsing from a mobile device or a normal web browser and redirect to the appropriate version of my site. I found very little ASP.NET tutorials that worked. So I decided to take a few different methods and language options I found on the net and put them into one simple ASP.NET method.

Using the Code

It is just a static boolean method that gets called, 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;
}

Points of Interest

As you can see, the above code is written in new syntax. But, it can easily be changed to work on any version of .NET. Instead of using the short hand array initializer, use new string[] {} (instead of new[] {}).

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Vincent Van Zyl
Team Leader Blueworld Communities
South Africa South Africa
Member
I am fairly new to programming as I began programming in asp.net and C# in 2005.
 
But I have learned a lot in a very short space of time thanks to code project and sitepoint. I work in a very fast past company which also helped speed things up

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionThe way to build mobiles array is inportantmemberMember 773936631 Jan '13 - 8:27 
GeneralMy vote of 1memberfawad13 Mar '12 - 22:56 
SuggestionNew devicesmemberBoci5 Dec '11 - 9:53 
GeneralRe: New devicesmemberblagoja29 Dec '11 - 0:50 
Questionthanksmemberhugorafael20 Jun '11 - 9:58 
GeneralThanksmemberNikhil_Patel12327 Apr '11 - 4:01 
GeneralImproved versionmemberHarvo23 Nov '10 - 15:08 
GeneralRe: Improved versionmemberDaniel Gidman5 May '11 - 9:04 
GeneralRe: Improved versionmemberHarvo5 May '11 - 10:02 
GeneralRe: Improved versionmembersanilpnair8 Aug '11 - 4:03 
GeneralRe: Improved versionmemberLe Cong Thanh16 Sep '11 - 6:19 
GeneralGreat articlememberORamses5 Sep '10 - 0:42 
Generalsome little enhancementsmembersmartcatxxx11 Oct '09 - 7:02 
GeneralDetect Mobile InfomationmemberAmimpat31 Jul '09 - 1:12 
GeneralRe: Detect Mobile Infomation [modified]memberDutchMafia13 Aug '09 - 3:44 
GeneralRe: Detect Mobile InfomationmemberAmaresh Jois5 Aug '10 - 18:46 
GeneralRe: Detect Mobile InfomationmemberAmaresh Jois27 Aug '10 - 2:40 
There is a 4 minute video on the usage of 51degrees.mobi foundation .NET open source toolkit to Enhance your existing website to contain mobile pages.
 
Video (3:43 minutes): http://www.youtube.com/watch?v=b4io5KB4Qt0
GeneralRe: Detect Mobile InfomationmemberJMatthewson14 Sep '12 - 3:00 
GeneralThis code contains false positives!memberEricLaw14 Jul '09 - 8:28 
GeneralRe: This code contains false positives!memberWendy Youngblood30 Mar '10 - 6:58 
GeneralBugmemberthezone1237 Apr '09 - 22:44 
GeneralRe: Bugmembermgbaldwin13 Jul '09 - 1:42 
Generalthanks,memberjusjusjus30 Mar '09 - 22:26 
GeneralThanksmemberthund3rstruck24 Mar '09 - 7:09 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 24 Mar 2009
Article Copyright 2009 by Vincent Van Zyl
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid