Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

How to Detect Browser Capabilities in ASP.NET

0.00/5 (No votes)
21 Sep 2012 1  
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 has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here