Click here to Skip to main content
13,050,606 members (92,934 online)
Click here to Skip to main content
Add your own
alternative version


68 bookmarked
Posted 24 Mar 2009

Detecting a mobile browser in ASP.NET

, 24 Mar 2009
Rate this:
Please Sign up or sign in to vote.
How to detect a mobile device accessing your ASP.NET website.


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


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()
    HttpContext context = HttpContext.Current;

    if (context.Request.Browser.IsMobileDevice)
        return true;
    if (context.Request.ServerVariables["HTTP_X_WAP_PROFILE"] != null)
        return true;
    if (context.Request.ServerVariables["HTTP_ACCEPT"] != null && 
        return true;
    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"].
                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[] {}).


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
I am fairly new to programming as I began programming in 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

You may also be interested in...

Comments and Discussions

Questioni have an issue in Auto detect mobile browser Pin
araskurd15-Sep-15 23:41
memberaraskurd15-Sep-15 23:41 
Questiongood Pin
mirrortom17-Jan-15 23:35
membermirrortom17-Jan-15 23:35 
Questiondon't repeat the request.servervariables request Pin
Mark Findlay9-Jun-14 6:04
memberMark Findlay9-Jun-14 6:04 
QuestionThe way to build mobiles array is inportant Pin
Member 773936631-Jan-13 8:27
memberMember 773936631-Jan-13 8:27 
GeneralMy vote of 1 Pin
fawad13-Mar-12 22:56
memberfawad13-Mar-12 22:56 
SuggestionNew devices Pin
Boci5-Dec-11 9:53
memberBoci5-Dec-11 9:53 
GeneralRe: New devices Pin
blagoja29-Dec-11 0:50
memberblagoja29-Dec-11 0:50 
Questionthanks Pin
hugorafael20-Jun-11 9:58
memberhugorafael20-Jun-11 9:58 
GeneralThanks Pin
Nikhil_Patel12327-Apr-11 4:01
memberNikhil_Patel12327-Apr-11 4:01 
GeneralImproved version Pin
Harvo23-Nov-10 15:08
memberHarvo23-Nov-10 15:08 
GeneralRe: Improved version Pin
Daniel Gidman5-May-11 9:04
memberDaniel Gidman5-May-11 9:04 
GeneralRe: Improved version Pin
Harvo5-May-11 10:02
memberHarvo5-May-11 10:02 
GeneralRe: Improved version Pin
sanilpnair8-Aug-11 4:03
membersanilpnair8-Aug-11 4:03 
GeneralRe: Improved version Pin
Le Cong Thanh16-Sep-11 6:19
memberLe Cong Thanh16-Sep-11 6:19 
GeneralGreat article Pin
ORamses5-Sep-10 0:42
memberORamses5-Sep-10 0:42 
Generalsome little enhancements Pin
smartcatxxx11-Oct-09 7:02
membersmartcatxxx11-Oct-09 7:02 
You could add the following check after the context.Request.Browser.IsMobileDevice block:

if (!context.Request.Browser.Browser.Equals("Unknown", StringComparison.InvariantCultureIgnoreCase)) return false;

Those 2 blocks of code cover the set of cases when ASP.NET knows what kind of browser is dealing with. The additional checks based on the server variables are needed ONLY if ASP.NET is clueless about the browser. This should cut down the false positives to basically 0. E.g. if you are dealing with IE, the browser capabilities code will know that therefore will return false without going through checking the user agent strings and labeling IE MSN-branded as mobile browser, as reported by EricLaw. Also, the check for HTTP_ACCEPT could check for "wml+xml", not only for "wap".

Since we could be talking about a high traffic website, I would like to suggest some small performance enhancements:

a. move the array containing the user agent strings outside the isMobileBrowser() method e.g.:

private static readonly string[] arrMobilePhones = new string[] {"midp", "j2me", "avant", "docomo", ...etc };

This way it gets created only once upon application startup (rather than with each method call) then it stays in memory until the application shuts down or runs into some memory allocation issues/crashes.

b. foreach is almost twice slower than going through an array index-based, so:

string strUserAgent = context.Request.ServerVariables["HTTP_USER_AGENT"];
for (int i=0 ; i < mobiles.Length ; i++)
if (strUserAgent.IndexOf(mobiles[i], StringComparison.InvariantCultureIgnoreCase) >= 0) return true;
GeneralDetect Mobile Infomation Pin
Amimpat31-Jul-09 1:12
memberAmimpat31-Jul-09 1:12 
GeneralRe: Detect Mobile Infomation Pin
Amaresh Jois5-Aug-10 18:46
memberAmaresh Jois5-Aug-10 18:46 
GeneralRe: Detect Mobile Infomation Pin
Amaresh Jois27-Aug-10 2:40
memberAmaresh Jois27-Aug-10 2:40 
GeneralRe: Detect Mobile Infomation Pin
JMatthewson14-Sep-12 3:00
memberJMatthewson14-Sep-12 3:00 
GeneralThis code contains false positives! Pin
EricLaw14-Jul-09 8:28
memberEricLaw14-Jul-09 8:28 
GeneralRe: This code contains false positives! Pin
Wendy Youngblood30-Mar-10 6:58
memberWendy Youngblood30-Mar-10 6:58 
GeneralBug Pin
thezone1237-Apr-09 22:44
memberthezone1237-Apr-09 22:44 
GeneralRe: Bug Pin
mgbaldwin13-Jul-09 1:42
membermgbaldwin13-Jul-09 1:42 
Generalthanks, Pin
jusjusjus30-Mar-09 22:26
memberjusjusjus30-Mar-09 22:26 
GeneralThanks Pin
thund3rstruck24-Mar-09 7:09
memberthund3rstruck24-Mar-09 7:09 

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

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