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

How to Detect Browser Capabilities in ASP.NET

, 21 Sep 2012
Rate this:
Please Sign up or sign in to vote.
This project demonstrates the implementation of server-side Web Browser's type/capability detection API, written in C# and Java scripting

Introduction 

Proper detection of Web Browsers' type and capabilities is rather important from both end-user's and developer's perspectives. The differences between Web Browsers, rooted in either branding or versioning, could cause serious portability issues, potentially resulting in some Web applications rendering incorrectly, or even not running at all.  Hopefully, strict adherence to emerging HTML5/CSS3 specs will help to dramatically improve inter-browsers compatibility and, correspondingly, the portability of Web apps.

Solution

A simple browser-detection feature could be added to ASP.NET web applications providing valuable feedback to end users and also helping the tech support folks to perform remote troubleshooting based on the clients' input regarding the web browser(s) in use.

Demo

A working DEMO is available at www.webinfocentral.com (click on the button “Browser”). A sample screenshot is shown below in Fig.1:

Figure 1. Sample screenshot demonstrating browser capabilities

Background 

This project demonstrates a simple implementation of server-side browser type/capabilities detection feature, written in C# with just a little bit of client-side Java scripting added for better responsiveness and interactivity. The same or even better level of responsiveness/interactivity could be achieved by using either ASP.NET AJAX or Microsoft Silverlight™ RIA technology set instead of JavaScript.

Code 

The project code written in C# compatible with any ASP.NET 2.0+ web site contains the following:

  • Class Module "BrowserInfo.cs" to be placed in AppCode directory
  • Default Web page "Default.aspx" to be placed in Application root directory

The core functionality is encapsulated in the class module "BrowserInfo.cs" shown below (notice some optional extensions, commented-off in the code; also, for simplicity and readability this solution is using simple string concatenation. Some performance improvement could be achieved by implementing StringBuilder object for string manipulation):

//******************************************************************************
// Module           :   BrowserInfo.cs
// Author           :   Alexander Bell
// Copyright        :   2008-2009 Infosoft International Inc
// Date Created     :   01/15/2008
// Last Modified    :   09/14/2009
// Description      :   Get Browser info
//******************************************************************************
// DISCLAIMER: This Application is provide on AS IS basis without any warranty
//******************************************************************************
using System;
using System.Web;
///*****************************************************************************
/// <summary>Server sider Browser detection: ASP.NET 2.0</summary> 
public static class InfosoftBrowserInfo
{
    #region Get Browser capabilities
    /// <summary>Browser capabilities: 2D array of Name/Values</summary>
    public static string[,] BrowserAttributes
    {
        get
        {
            string _agent = String.Empty;
            if (HttpContext.Current == null) return null;
            try
            {
                // detailed string describing some of browser capabilities
                _agent = HttpContext.Current.Request.UserAgent;
                // browser capabilities object
                HttpBrowserCapabilities _browser = HttpContext.Current.Request.Browser;
                // browser capabilities (properties) 2D array of strings, Name/Value
                string[,] arrFieldValue = 
                {
                    {
                    //"Type",
                    "Name",
                    "Version",
                    //"Major Version",
                    //"Minor Version",
                    "Platform",
                    "ECMA Script Version",
                    "Is Mobile Device",
                    "Is Beta",
                    //"Is Crawler",
                    //"Is AOL",
                    "Is Win16",
                    "Is Win32",
                    "Supports Frames",
                    "Supports Tables",
                    "Supports Cookies",
                    "Supports CSS",
                    "Supports VB Script",
                    "Supports JavaScript",
                    "Supports Java Applets",
                    "Supports ActiveX Controls",
                    "Supports CallBack",
                    "Supports XMLHttp",
                    
                    String.Empty,
                    "User Agent Details"
                    }, 
                    {
                    //_browser.Type,
                    
                    (_agent.ToLower().Contains("chrome"))? "Chrome" :_browser.Browser,
                    (_agent.ToLower().Contains("chrome"))? 
			"See User Agent Details below" :_browser.Version,
                    
                    //_browser.MajorVersion.ToString(),
                    //_browser.MinorVersion.ToString(),
                    
                    _browser.Platform,
                    _browser.EcmaScriptVersion.ToString(),
                    
                    (_browser.IsMobileDevice)? "YES": "NO",
                    (_browser.Beta)? "YES": "NO",
                    
                    //_browser.Crawler.ToString(),
                    //_browser.AOL.ToString(),
                    (_browser.Win16)? "YES": "NO",
                    (_browser.Win32)? "YES": "NO",
                    
                    (_browser.Frames)? "YES": "NO",
                    (_browser.Tables)? "YES": "NO",
                    (_browser.Cookies)? "YES": "NO",
                    (_browser.SupportsCss)? "YES": "NO",
                    (_browser.VBScript)? "YES": "NO",
                    (_browser.JavaScript)? "YES": "NO",
                    (_browser.JavaApplets)? "YES": "NO",
                    (_browser.ActiveXControls)? "YES": "NO",
                    (_browser.SupportsCallback)? "YES": "NO",
                    (_browser.SupportsXmlHttp)? "YES": "NO",
                    String.Empty,
                    _agent
                    }
                };
                return arrFieldValue;
            }
            catch { return null; }
        }
    }
    /// <summary>JavaScript string to containing Browsers capabilities</summary>
    public static string BrowserJavaScript
    {
        get
        {
            // return string contains JavaScript
            string MsgBrowser = String.Empty;
            string[,] arrBrowser = BrowserAttributes;
            if (arrBrowser == null) return String.Empty;
            try
            {
                // pop-up message using JavaScript:alert function
                MsgBrowser = "javascript:alert('Your Browser properties: \\n";
                for (int i = 0; i < arrBrowser.GetLength(1); i++)
                { MsgBrowser += "\\n" + arrBrowser[0, i] + " : " + arrBrowser[1, i]; }
                return MsgBrowser += "')";
            }
            catch { return String.Empty; }
        }
    }
    #endregion
}

A Sample Web Page contains a single Button1 control with "onclick" event handler added as shown below:

 <%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Browser Detection } Infosoft International Inc</title>
    
    <script runat="server">
        private string _browser;
        protected void Page_PreInit(object sender, EventArgs e)
        {_browser = InfosoftBrowserInfo.BrowserJavaScript;}
        protected void Page_Load(object sender, EventArgs e)
        { Button1.Attributes.Add("onclick", _browser);}
    </script>
    
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <br />
        <asp:Button ID="Button1" runat="server" Text="Get Browser Info" />
        <br />
    </div>
    </form>
</body>
</html>

Points of Interest 

The solution is tested for compatibility with four major Web browsers:

  • Microsoft Internet Explorer 7.0+
  • Mozilla Firefox
  • Google Chrome
  • Apple Safari  

History

  • Article posted on 09/14/2009
  • Updated on 9/21/2012 

License

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

Share

About the Author

DrABELL
President Infosoft International Inc
United States United States
Dr. A. Bell has 20+ years of Software and Electrical Engineering experience. He is Win/Web veteran, published 200+ articles and authored 37 inventions, currently focused on: Windows 7/8, HTML5, CSS3, jQuery, SQL, .NET, ASP.NET, WPF, C#, Speech Technology and Mobile apps. He's been among recent App submission winners (The Windows 8* & Ultrabook™ App Innovation Contest 2012). Sample pubs:
  1. Edumatter M12: School Math Calculators and Equation Solvers (contest winner)
  2. Engineering Calculator VOLTA-2013 (contest winner)
  3. HTML5 Best Practices: Table formatting via CSS3
  4. Edumatter-M12 for Windows, app overview
  5. Engineering Calculator VOLTA-814D
  6. CoolPhone: phone numbers-to-text converter
  7. SQL generates large data sequence
  8. Aggregate Product function extends SQL
  9. Top-50 Digital Cameras
  10. WebTV Project: Embedded YouTube Player (Goog #1 YouTube API for ASP.NET)
Dr. Bell is personally credited for 10+ Enterprise level projects (Finance/Investment, Engineering, Edu) w/total code base exceeding 250k lines; doing consulting in NYC for 20 yrs.
Follow on   Twitter

Comments and Discussions

 
GeneralMy vote of 1 PinmemberPete Appleton25-Sep-12 0:11 
GeneralRe: My vote of 1 PinmemberDrABELL25-Sep-12 2:52 
GeneralRe: My vote of 1 PinmemberPete Appleton27-Sep-12 23:08 
QuestionLimited by HttpContext.Current.Request.Browser PinadminChris Maunder21-Sep-12 11:17 
AnswerRe: Limited by HttpContext.Current.Request.Browser PinmemberDrABELL21-Sep-12 12:32 
GeneralShort URL PinmemberDrABELL3-Jan-11 6:13 
GeneralBrowser capabilities for Mobile PinmemberAmaresh Jois27-Aug-10 4:29 
GeneralOr you can just use my page, and know even more about the browser.... Pinmemberzachgotnosauce11-Jan-10 8:38 
General[Message Deleted] PinmemberShadowX18-Sep-09 3:15 
General[My vote of 1] vote 1 Pinmembermambo_215-Sep-09 4:04 
GeneralRe: [My vote of 1] vote 1 RE: you seem to be biased and unfair [modified] PinmemberDrABELL15-Sep-09 4:52 

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

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

| Advertise | Privacy | Mobile
Web02 | 2.8.140827.1 | Last Updated 21 Sep 2012
Article Copyright 2009 by DrABELL
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid