如何从Request.UserAgent获取操作系统?

时间:2013-10-31 18:37:34

标签: c# asp.net operating-system

好的,所以我正在开发一个ASP.Net网站(后面是C#代码),出于故障排除的原因(我们大多数需要技术支持的客户都不知道他们使用的OS / Browser / BrowserVersion),我们想要记录“系统配置文件”,以便我们可以更轻松地解决与操作系统/浏览器相关的问题。

目前,我正在使用Request.UserAgent。这样做的问题是它返回一个对我们的支持人员无益的字符串:

  
    

Mozilla / 5.0(Windows NT 6.1; rv:24.0)Gecko / 20100101 Firefox / 24.0

  

我想要做的就是单独拉动操作系统(Windows NT 6.1,或者用户拥有的任何操作系统),而不需要额外的浏览器信息,因为我已经将其他系统信息隔离开了:

  
    

|用户ID | UserOS | BrowserType | BrowserName | MajorVersion | MinorVersion | IsBeta |

         

| 11111 | userOS * | * Firefox24.0 * | * * Firefox * * | * * * * * 24 * * * * | * * * * 0 * * * * | * * 0 * * |

  

是否可以单独获得操作系统?

如果您知道如何从客户端计算机(即Windows 7与Windows NT 6.1)获取操作系统友好名称,则可以获得积分,这将使我不必创建单独的操作系统编号数据库。

1 个答案:

答案 0 :(得分:4)

用户代理不会给你一个友好的名字,所以你需要维护一个列表,这应该有用......

        Dictionary<string, string> osList = new Dictionary<string, string>
        {
            {"Windows NT 6.3", "Windows 8.1"},
            {"Windows NT 6.2", "Windows 8"},
            {"Windows NT 6.1", "Windows 7"},
            {"Windows NT 6.0", "Windows Vista"},
            {"Windows NT 5.2", "Windows Server 2003"},
            {"Windows NT 5.1", "Windows XP"},
            {"Windows NT 5.0", "Windows 2000"}
        };

        string userAgentText = HttpContext.Current.Request.UserAgent;

        if (userAgentText != null)
        {
            int startPoint = userAgentText.IndexOf('(') + 1;
            int endPoint = userAgentText.IndexOf(';');

            string osVersion = userAgentText.Substring(startPoint, (endPoint - startPoint));
            string friendlyOsName = osList[osVersion];
        }