how do I detect user operating system
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