tag route net for data asp all asp.net browser platform httpbrowsercapabilities

asp.net - route - razor asp for



¿Cómo detecto el sistema operativo del usuario? (11)

Esto es lo que se me ocurrió y parece funcionar bastante bien:

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; }

Tengo el siguiente código para obtener detalles del usuario:

HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser; string UserAgent = HttpContext.Current.Request.UserAgent; ENT_TrackingData ret = new ENT_TrackingData() { IPAddress = HttpContext.Current.Request.UserHostAddress, Browser = bc.Browser + " " + bc.Version, DateStamp = DateTime.Now, PageViewed = HttpContext.Current.Request.Url.AbsolutePath, NodeId = UmbracoHelper.GetCurrentNodeID(), IsMobileDevice = IsMobileDevice(UserAgent), Platform = bc.Platform };

Esto funciona muy bien pero noté que la Plataforma siempre dice Windows NT para mi máquina, no Windows 7. ¿Hay alguna forma de detectar este tipo de información en ASP.Net?


Hay una herramienta genial llamada: https://github.com/ua-parser/uap-csharp
que analiza el agente de usuario para el sistema operativo, el navegador, la versión del navegador, etc.
Enlace a Nuget

Y así es como se usa:

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; }


La función VB de John es buena, pero la línea para Windows 10 no funciona porque tiene "WINDOWS" en mayúsculas.

Debe ser igual a los demás, es decir

If MyAgent.IndexOf("Windows NT 10.0") >= 0 Then Return "Windows 10"


La respuesta de VB.NET: Lo incluyo solo porque puede ser más fácil de leer y entender.

Public Function GetOS() As String Dim MyAgent As String = Current.Request.UserAgent If MyAgent.IndexOf("Windows NT 10.0") >= 0 Then Return "Windows 10" ElseIf MyAgent.IndexOf("Windows NT 6.3") >= 0 Then Return "Windows 8.1" ElseIf MyAgent.IndexOf("Windows NT 6.2") >= 0 Then Return "Windows 8" ElseIf MyAgent.IndexOf("Windows NT 6.1") >= 0 Then Return "Windows 7" ElseIf MyAgent.IndexOf("Windows NT 6.0") >= 0 Then Return "Windows Vista" ElseIf MyAgent.IndexOf("Windows NT 5.2") >= 0 Then Return "Windows Server 2003" ElseIf MyAgent.IndexOf("Windows NT 5.1") >= 0 Then Return "Windows XP" ElseIf MyAgent.IndexOf("Windows NT 5.01") >= 0 Then Return "Windows 2000 (SP1)" ElseIf MyAgent.IndexOf("Windows NT 5.0") >= 0 Then Return "Windows 2000" ElseIf MyAgent.IndexOf("Windows NT 4.5") >= 0 Then Return "Windows NT 4.5" ElseIf MyAgent.IndexOf("Windows NT 4.0") >= 0 Then Return "Windows NT 4.0" ElseIf MyAgent.IndexOf("Win 9x 4.90") >= 0 Then Return "Windows ME" ElseIf MyAgent.IndexOf("Windows 98") >= 0 Then Return "Windows 98" ElseIf MyAgent.IndexOf("Windows 95") >= 0 Then Return "Windows 95" ElseIf MyAgent.IndexOf("Windows CE") >= 0 Then Return "Windows CE" ElseIf (MyAgent.Contains("iPad")) Then Return String.Format("iPad OS {0}", GetMobileVersion(MyAgent, "OS")) ElseIf (MyAgent.Contains("iPhone")) Then Return String.Format("iPhone OS {0}", GetMobileVersion(MyAgent, "OS")) ElseIf (MyAgent.Contains("Linux") AndAlso MyAgent.Contains("KFAPWI")) Then Return "Kindle Fire" ElseIf (MyAgent.Contains("RIM Tablet") OrElse (MyAgent.Contains("BB") AndAlso MyAgent.Contains("Mobile"))) Then Return "Black Berry" ElseIf (MyAgent.Contains("Windows Phone")) Then Return String.Format("Windows Phone {0}", GetMobileVersion(MyAgent, "Windows Phone")) ElseIf (MyAgent.Contains("Mac OS")) Then Return "Mac OS" ElseIf MyAgent.IndexOf("ANDROID") >= 0 Then Return String.Format("Android {0}", GetMobileVersion(MyAgent, "ANDROID")) Else Return "OS is unknown." End If End Function Private Function GetMobileVersion(userAgent As String, device As String) As String Dim ReturnValue As String = String.Empty Dim RawVersion As String = userAgent.Substring(userAgent.IndexOf(device) + device.Length).TrimStart() For Each character As Char In RawVersion If IsNumeric(character) Then ReturnValue &= character ElseIf (character = "." OrElse character = "_") Then ReturnValue &= "." Else Exit For End If Next Return ReturnValue End Function


No hay una forma precisa de hacerlo, ya que toda la información que obtiene de los encabezados de solicitud del usuario puede cambiarla fácilmente y puede contener cualquier cosa.

Si está de acuerdo con la lectura de información probablemente inexacta, es posible que desee consultar esta respuesta SO a una pregunta similar


Prueba esto solo lo modifico

string device = getOSInfo(); public String getOSInfo() { 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 (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; }


Según este documento oficial de Microsoft , podemos usarlo para detectar el sistema operativo Windows:

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 }


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 }


Utilice el número de versión después de "Windows NT". Windows 7 tiene 6.1 como número de versión.

Pero no confíe demasiado en eso, la cadena de agente de usuario no es estándar. Por ejemplo, mira esta lista , verás que alguien está utilizando Internet Explorer con Windows 9.0.


Todo en una clase

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; } }

Uso

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


private string getOS() { string os = null; if (Request.UserAgent.IndexOf("Windows NT 5.1") > 0) { os ="Windows XP"; return os; } else if (Request.UserAgent.IndexOf("Windows NT 6.0") > 0) { os= "Windows Vista"; return os; } else if (Request.UserAgent.IndexOf("Windows NT 6.1") > 0) { os = "Windows 7"; return os; } else if (Request.UserAgent.IndexOf("Intel Mac OS X") > 0) { //os = "Mac OS or older version of Windows"; os = "Intel Mac OS X"; return os; } else { os = "You are using older version of Windows or Mac OS"; return os; } }