Monday, December 30, 2013

Detect IE 11 - enhance Request.Browser (HttpBrowserCapabilities) in ASP.NET web application (C#)

In Global.asax.cs:

protected void Application_Start(Object sender, EventArgs e)
{
    ...
    HttpCapabilitiesBase.BrowserCapabilitiesProvider = new CustomerHttpCapabilitiesProvider();
    ...
}

Define class:

public class CustomerHttpCapabilitiesProvider : HttpCapabilitiesDefaultProvider
{
    public override HttpBrowserCapabilities GetBrowserCapabilities(HttpRequest request)
    {
        HttpBrowserCapabilities browser = base.GetBrowserCapabilities(request);

        // Correct for IE 11, which presents itself as Mozilla version 0.0
        string ua = request.UserAgent;

        // Ensure IE by checking for Trident
        // Teports the real IE version, not the compatibility view version. 
        if (ua.Contains(@"Trident"))
        {
            if (!browser.IsBrowser(@"IE"))
            {
                browser.AddBrowser(@"ie");
                browser.AddBrowser(@"ie6plus");
                browser.AddBrowser(@"ie10plus");
            }

            IDictionary caps = browser.Capabilities;
            caps[@"Browser"] = @"IE";

            // Determine browser version
            bool ok = false;
            string majorVersion = null; // convertable to in
            string minorVersion = null; // convertable to double
            Match m = Regex.Match(ua, @"rv:(\d+)\.(\d+)");
            if (m.Success)
            {
                ok = true;
                majorVersion = m.Groups[1].Value;
                minorVersion = m.Groups[2].Value; // typically 0
            }
            else
            {
                m = Regex.Match(ua, @"Trident/(\d+)\.(\d+)");
                if (m.Success)
                {
                    int v;
                    ok = int.TryParse(m.Groups[1].Value, out v);
                    if (ok)
                    {
                        v += 4; // Trident/7 = IE 11, Trident/6 = IE 10, Trident/5 = IE 9, and Trident/4 = IE 8
                        majorVersion = v.ToString(@"d");
                        minorVersion = m.Groups[2].Value; // typically 0
                    }
                }
            }

            if (ok)
            {
                caps[@"MajorVersion"] = majorVersion;
                caps[@"MinorVersion"] = minorVersion;
                caps[@"Version"] = String.Format(@"{0}.{1}", majorVersion, minorVersion);
            }
        }

        return browser;
    }
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.