How to detect browsers in ASP.NET with browser files

By FoxLearn 11/4/2024 2:47:57 AM   103
This article explains how to configure browser files in ASP.NET for effective browser detection.

To create a new ASP.NET Web Application in Visual Studio, start by selecting "New Project" from the Start page.

In the Templates pane, expand the Visual C# node, choose Web, and then select "ASP.NET Web Application."

In the New ASP.NET Project dialog, select the Empty template and check the option to add Web API references. Click OK to create the project. 

Next, in Solution Explorer, right-click the Controllers folder, select "Add," and then choose "Controller."

How to Detect Browsers with an ASP.NET Application

After installing and configuring ASP.NET Web API, it allows easy access to key properties of incoming requests, such as the browser and platform. The provided code demonstrates how to identify the client's browser within the DefaultController class.

public IHttpActionResult Get()
{
    HttpRequestBase baseRequest = ((HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request as HttpRequestBase;
    HttpBrowserCapabilitiesBase browser = baseRequest.Browser;
    string data = browser.Browser + " " + browser.Version;
    // You can store the browser used in a data store
    return Ok();
}

How the browser is actually inferred by ASP.NET

Each time a browser connects to a website, it sends a user agent string that identifies the browser and the operating system it is running on. This string provides valuable information for the server. Below are examples of typical user agents for various browsers across different operating systems.

For example, a user-agent string might look like this:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36

In ASP.NET, you can detect the browser being used by a client through a feature called "browser file" support.

ASP.NET uses a set of .browser files located in the App_Browsers directory to define different browsers and their capabilities. You can find these files in the C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers directory or your ASP.NET installation path.

If you open one of these files (chrome.browser for example), you will find the following content.

<browsers>  
  <browser id="Chrome" parentID="WebKit">
    <identification>
      <userAgent match="Chrome/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
    </identification>
    <capabilities>
      <capability name="browser"                         value="Chrome" />
      <capability name="majorversion"                    value="${major}" />
      <capability name="minorversion"                    value="${minor}" />
      <capability name="type"                            value="Chrome${major}" />
      <capability name="version"                         value="${version}" />
      <capability name="ecmascriptversion"               value="3.0" />
      <capability name="javascript"                      value="true" />
      <capability name="javascriptversion"               value="1.7" />
      <capability name="w3cdomversion"                   value="1.0" />
      <capability name="supportsAccesskeyAttribute"      value="true" />
      <capability name="tagwriter"                       value="System.Web.UI.HtmlTextWriter" />
      <capability name="cookies"                         value="true" />
      <capability name="frames"                          value="true" />
      <capability name="javaapplets"                     value="true" />
      <capability name="supportsCallback"                value="true" />
      <capability name="supportsDivNoWrap"               value="false" />
      <capability name="supportsFileUpload"              value="true" />
      <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
      <capability name="supportsMultilineTextBoxDisplay" value="true" />
      <capability name="supportsXmlHttp"                 value="true" />
      <capability name="tables"                          value="true" />
    </capabilities>
  </browser>
</browsers>

The parentID tag in the chrome.browser file references another browser file, generic.browser, indicating that it serves as the parent for the chrome.browser file. This relationship allows the chrome browser definition to inherit properties and capabilities from the generic definition.

<browser id="WebKit" parentID="Mozilla">
  <identification>
    <userAgent match="AppleWebKit" />
  </identification>
  <capture>
    <userAgent match="AppleWebKit/(?'layoutVersion'\d+)" />
  </capture>
  <capabilities>
    <capability name="layoutEngine" value="WebKit" />
    <capability name="layoutEngineVersion" value="${layoutVersion}" />
  </capabilities>
</browser>

To create a custom browser file, you can create a folder named App_Browsers in your ASP.NET project,

Inside this folder, create a new .browser file, e.g., CustomBrowsers.browser.

Populate your .browser file with XML that describes the browser.

For example:

<?xml version="1.0"?>
<browsers>
    <browser name="MyCustomBrowser" id="MyCustomBrowser">
        <capabilities>
            <capability name="browser" value="MyCustomBrowser" />
            <capability name="version" value="1.0" />
            <capability name="platform" value="CustomPlatform" />
        </capabilities>
        <strings>
            <string name="type" value="My Custom Browser" />
        </strings>
    </browser>
</browsers>

Ensure your browser file can match the user-agent string.

For instance, if your custom browser sends a specific user-agent string, you can set that in the file:

<browser name="MyCustomBrowser" id="MyCustomBrowser">
    <user-agent>MyCustomBrowserUserAgent</user-agent>
</browser>

Once you have your browser definitions set up, you can access browser-specific information in your ASP.NET code. For example, in a code-behind file:

protected void Page_Load(object sender, EventArgs e)
{
    string browserName = Request.Browser.Browser;
    string version = Request.Browser.Version;

    if (browserName == "MyCustomBrowser")
    {
        // Specific logic for MyCustomBrowser
    }
}

The Request.Browser object contains properties that provide information about the client's browser.

By using browser definition files, you can extend ASP.NET's capability to recognize and respond to different browsers effectively.