J'ai le code suivant pour obtenir les détails de l'utilisateur:
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
};
Cela fonctionne très bien, mais j'ai remarqué que la plate-forme indiquait toujours que Windows NT pour ma machine, et non pas Windows 7. Est-il possible de détecter ce type d'informations dans ASP.Net?
Voici ce que je suis venu avec et cela semble fonctionner assez 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;
}
Utilisez 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
}
Selon Ce document Microsoft officiel nous pouvons l’utiliser pour détecter le système d’exploitation 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
}
Il existe un outil intéressant nommé: https://github.com/ua-parser/uap-csharp
qui analyse l'agent utilisateur à l'OS, au navigateur, à la version du navigateur, etc.
Lien vers Nuget
Et voici comment on l'utilise:
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;
}
Il n'y a pas de méthode précise car toutes les informations que vous obtenez à partir des en-têtes de la demande de l'utilisateur peuvent être facilement modifiées par l'utilisateur et peuvent contenir n'importe quoi.
Si vous êtes prêt à lire des informations probablement inexactes, vous pouvez vérifier cette SO réponse à une question similaire
Utilisez le numéro de version après "Windows NT". Windows 7 a 6.1 comme numéro de version.
Mais ne comptez pas trop sur cela, la chaîne de l'agent utilisateur est non standard . Par exemple, regardez cette liste , vous verrez que quelqu'un utilise Internet Explorer avec Windows 9.0!
Tout en un cours
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;
}
}
Utilisation
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;
}
}
La réponse de VB.NET: Je l’inclue uniquement parce qu’il pourrait être plus facile à lire et à comprendre.
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
John, la fonction VB est agréable, mais la ligne de Windows 10 ne fonctionne pas, car "WINDOWS" est en majuscule.
Il devrait être identique aux autres, c.-à-d.
If MyAgent.IndexOf("Windows NT 10.0") >= 0 Then
Return "Windows 10"
Essayez ceci je viens de modifier
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;
}