30

ユーザーの詳細を取得するための次のコードがあります。

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

これはうまく機能しますが、プラットフォームが常に自分のマシンに対して Windows 7 ではなく Windows NT と表示していることに気付きました。ASP.Net でこの種の情報を検出する方法はありますか?

4

11 に答える 11

43

これが私が思いついたもので、かなりうまくいくようです:

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;
}
于 2015-08-20T17:09:06.793 に答える
20

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
}
于 2012-03-16T09:29:39.290 に答える
9

This Official Microsoft Documentによると、これを使用して 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
}
于 2014-08-24T10:24:46.977 に答える
9

ユーザーエージェントをOS、ブラウザ、ブラウザバージョンなどに解析するhttps://github.com/ua-parser/uap-csharpという名前のクールなツールがあります... Nugetへのリンク

そして、これはそれをどのように使用したかです:

 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;
 }
于 2016-08-08T11:50:24.267 に答える
2

ユーザーリクエストのヘッダーから得られるすべての情報は、ユーザーが簡単に変更でき、何でも含むことができるため、正確な方法はありません。

おそらく不正確な情報を読んでも問題ない場合は、このSOの同様の質問への回答を確認することをお勧めします

于 2012-03-16T09:29:21.463 に答える
2

「Windows NT」の後にバージョン番号を使用します。Windows 7 のバージョン番号は 6.1 です。

しかし、それに頼りすぎないでください。ユーザー エージェント文字列は標準です。たとえば、このリストを見ると、だれかが Windows 9.0 で Internet Explorer を使用していることがわかります。

于 2012-03-16T09:30:47.163 に答える
2
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;
    }

}
于 2014-02-25T16:20:42.960 に答える