Here's what I came up with and it seems to work fairly well:

public String GetUserEnvironment(HttpRequest request)
{
    var browser = request.Browser;
    var platform = GetUserPlatform(request);
    return string.Format("{0} {1} / {2}", browser.Browser, browser.Version, platform);
}

public String GetUserPlatform(HttpRequest request)
{
    var ua = request.UserAgent;

    if (ua.Contains("Android"))
        return string.Format("Android {0}", GetMobileVersion(ua, "Android"));

    if (ua.Contains("iPad"))
        return string.Format("iPad OS {0}", GetMobileVersion(ua, "OS"));

    if (ua.Contains("iPhone"))
        return string.Format("iPhone OS {0}", GetMobileVersion(ua, "OS"));

    if (ua.Contains("Linux") && ua.Contains("KFAPWI"))
        return "Kindle Fire";

    if (ua.Contains("RIM Tablet") || (ua.Contains("BB") && ua.Contains("Mobile")))
        return "Black Berry";

    if (ua.Contains("Windows Phone"))
        return string.Format("Windows Phone {0}", GetMobileVersion(ua, "Windows Phone"));

    if (ua.Contains("Mac OS"))
        return "Mac OS";

    if (ua.Contains("Windows NT 5.1") || ua.Contains("Windows NT 5.2"))
        return "Windows XP";

    if (ua.Contains("Windows NT 6.0"))
        return "Windows Vista";

    if (ua.Contains("Windows NT 6.1"))
        return "Windows 7";

    if (ua.Contains("Windows NT 6.2"))
        return "Windows 8";

    if (ua.Contains("Windows NT 6.3"))
        return "Windows 8.1";

    if (ua.Contains("Windows NT 10"))
        return "Windows 10";

    //fallback to basic platform:
    return request.Browser.Platform + (ua.Contains("Mobile") ? " Mobile " : "");
}

public String GetMobileVersion(string userAgent, string device)
{
    var temp = userAgent.Substring(userAgent.IndexOf(device) + device.Length).TrimStart();
    var version = string.Empty;

    foreach (var character in temp)
    {
        var validCharacter = false;
        int test = 0;

        if (Int32.TryParse(character.ToString(), out test))
        {
            version += character;
            validCharacter = true;
        }

        if (character == '.' || character == '_')
        {
            version += '.';
            validCharacter = true;
        }

        if (validCharacter == false)
            break;
    }

    return version;
}

Use Request.UserAgent

if (Request.UserAgent.IndexOf("Windows NT 5.1") > 0)
{
//xp
}
else if (Request.UserAgent.IndexOf("Windows NT 6.0") > 0)
{
//VISTA
}
else if (Request.UserAgent.IndexOf("Windows NT 6.1") > 0)
{
//7
}
else if (Request.UserAgent.IndexOf("Windows NT 6.2") > 0) 
{ 
//8
}
else if (Request.UserAgent.IndexOf("Windows NT 6.3") > 0) 
{ 
//8.1
}
else if (Request.UserAgent.IndexOf("Windows NT 10.0") > 0) 
{ 
//10
}

According to This Official Microsoft Document we can use this to detect Windows OS:

String userAgent = Request.UserAgent;

if (userAgent.IndexOf("Windows NT 6.3") > 0)
{
    //Windows 8.1
}
else if (userAgent.IndexOf("Windows NT 6.2") > 0)
{
    //Windows 8
}
else if (userAgent.IndexOf("Windows NT 6.1") > 0)
{
    //Windows 7
}
else if (userAgent.IndexOf("Windows NT 6.0") > 0) 
{ 
    //Windows Vista
}
else if (userAgent.IndexOf("Windows NT 5.2") > 0) 
{ 
    //Windows Server 2003; Windows XP x64 Edition
}
else if (userAgent.IndexOf("Windows NT 5.1") > 0) 
{ 
    //Windows XP
}
else if (userAgent.IndexOf("Windows NT 5.01") > 0) 
{ 
    //Windows 2000, Service Pack 1 (SP1)
}
else if (userAgent.IndexOf("Windows NT 5.0") > 0) 
{ 
    //Windows 2000
}
else if (userAgent.IndexOf("Windows NT 4.0") > 0) 
{ 
    //Microsoft Windows NT 4.0
}
else if (userAgent.IndexOf("Win 9x 4.90") > 0) 
{ 
    //Windows Millennium Edition (Windows Me)
}
else if (userAgent.IndexOf("Windows 98") > 0) 
{ 
    //Windows 98
}
else if (userAgent.IndexOf("Windows 95") > 0) 
{ 
    //Windows 95
}
else if (userAgent.IndexOf("Windows CE") > 0) 
{ 
    //Windows CE
}
else
{ 
    //Others
}

There is a cool tool named: https://github.com/ua-parser/uap-csharp
that parse the user agent to OS,Browser,Browser version etc...
Link to Nuget

And this is how used it:

 public static string GetUserOS(string userAgent)
 {
    // get a parser with the embedded regex patterns
    var uaParser = Parser.GetDefault();
    ClientInfo c = uaParser.Parse(userAgent);
    return c.OS.Family;
 }

All In One Class

  public class OS
        {
            public string os_name { get; set; }
            public string os_version { get; set; }

            public OS()
            {
                var ua = HttpContext.Current.Request.UserAgent;
                if (ua.Contains("Android"))
                {
                    this.os_name = "Android";
                    SetVersion(ua, "Android");
                    return;
                }

                if (ua.Contains("iPhone"))
                {
                    this.os_name = "iPhone";
                    SetVersion(ua, "OS");
                    return;
                }

                if (ua.Contains("iPad"))
                {
                    this.os_name = "iPad";
                    SetVersion(ua, "OS");
                    return;
                }

                if (ua.Contains("Mac OS"))
                {
                    this.os_name = "Mac OS";
                    return;
                }

                if (ua.Contains("Windows NT 10"))
                {
                    this.os_name = "Windows";
                    this.os_version = "10";
                    return;
                }

                if (ua.Contains("Windows NT 6.3"))
                {
                    this.os_name = "Windows";
                    this.os_version = "8.1";
                    return;
                }

                if (ua.Contains("Windows NT 6.2"))
                {
                    this.os_name = "Windows";
                    this.os_version = "8";
                    return;
                }


                if (ua.Contains("Windows NT 6.1"))
                {
                    this.os_name = "Windows";
                    this.os_version = "7";
                    return;
                }

                if (ua.Contains("Windows NT 6.0"))
                {
                    this.os_name = "Windows";
                    this.os_version = "Vista";
                    return;
                }

                if (ua.Contains("Windows NT 5.1") || ua.Contains("Windows NT 5.2"))

                {
                    this.os_name = "Windows";
                    this.os_version = "XP";
                    return;
                }

                if (ua.Contains("Windows NT 5"))
                {
                    this.os_name = "Windows";
                    this.os_version = "2000";
                    return;
                }

                if (ua.Contains("Windows NT 4"))
                {
                    this.os_name = "Windows";
                    this.os_version = "NT4";
                    return;
                }

                if (ua.Contains("Win 9x 4.90"))
                {
                    this.os_name = "Windows";
                    this.os_version = "Me";
                    return;
                }

                if (ua.Contains("Windows 98"))
                {
                    this.os_name = "Windows";
                    this.os_version = "98";
                    return;
                }

                if (ua.Contains("Windows 95"))
                {
                    this.os_name = "Windows";
                    this.os_version = "95";
                    return;
                }


                if (ua.Contains("Windows Phone"))
                {
                    this.os_name = "Windows Phone";
                    SetVersion(ua, "Windows Phone");
                    return;
                }

                if (ua.Contains("Linux") && ua.Contains("KFAPWI"))
                {
                    this.os_name = "Kindle Fire";
                    return;
                }

                if (ua.Contains("RIM Tablet") || (ua.Contains("BB") && ua.Contains("Mobile")))
                {
                    this.os_name = "Black Berry";
                    return;
                }

                //fallback to basic platform:
                this.os_name = request.Browser.Platform + (ua.Contains("Mobile") ? " Mobile " : "");
            }

            private void SetVersion(string userAgent, string device)
            {
                var temp = userAgent.Substring(userAgent.IndexOf(device) + device.Length).TrimStart();
                var version = string.Empty;

                foreach (var character in temp)
                {
                    var validCharacter = false;
                    int test = 0;

                    if (Int32.TryParse(character.ToString(), out test))
                    {
                        version += character;
                        validCharacter = true;
                    }

                    if (character == '.' || character == '_')
                    {
                        version += '.';
                        validCharacter = true;
                    }

                    if (validCharacter == false)
                        break;
                }
                this.os_version = version;
            }
        }

Usage

var os = new OS();
os.os_name; // here is os name
os.os_version; // here is os vers