[英]HttpBrowserCapabilities missing some information?
我想使用Request.Browser
属性( HttpBrowserCapabilities
类)来确定客户端系统的某些属性。
但是,我似乎遇到了此类的一些限制。 我找不到一些应该相对容易从UserAgent
字符串解析的属性,例如OS版本(对于大多数Windows版本, Platform
只会返回WinNT,而对于Vista,XP等则不会),或者是否为x64(仅Win16
和Win32
属性)。
我本来希望在HttpBrowserCapabilities
类中看到这些属性,因为那里还有大多数其他用户代理信息。 我想念什么吗? 我可以在其他地方找到此信息吗? 还是我应该自己从UserAgent字符串中解析它?
在ASP.NET 2.0和更高版本中,不建议使用browserCaps元素。 除非使用的是.NET 1或1.1,否则应使用浏览器定义文件。
将* App_Browsers *文件夹添加到您的站点(如果尚不存在),并创建一个名为“ Platforms.browser ”的新文件。 (名称无关紧要,只有扩展名。)
打开新的.browser文件,然后粘贴以下内容:
<browsers>
<gateway id="PlatformWinVista" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 6\.0" />
</identification>
<capabilities>
<capability name="platform" value="Windows Vista" />
</capabilities>
</gateway>
<gateway id="PlatformWin7" parentID="PlatformWinnt">
<identification>
<userAgent match="Windows NT 6\.1" />
</identification>
<capabilities>
<capability name="platform" value="Windows 7" />
</capabilities>
</gateway>
</browsers>
您可能需要触发网站的重新编译,以使新文件生效。
注意:这些节点必须是网关节点,而不是浏览器节点。 如果您尝试将它们创建为浏览器节点,则在站点重新编译时会出现解析器错误 。
您可以通过在machine.config / web.config文件中添加/扩展browserCaps配置部分来扩展HttpBrowserCapabilities。 例如,要更准确地检测操作系统版本,请在配置文件中添加以下内容:
<system.web>
<browserCaps>
<use var="HTTP_USER_AGENT" />
<filter>
<case match="Windows NT 6.1">
platform=Windows7
</case>
</filter>
</browserCaps>
</system.web>
如果使用在Windows 7上运行Mozilla的网站访问该网站(UserAgent =“ Mozilla / 5.0(Windows NT 6.1; WOW64; rv:2.0.1)Gecko / 20100101 Firefox / 4.0.1”),您将看到Request.Browser .Platform将显示“ Windows7”。 请参阅此处以获取更多信息: http : //msdn.microsoft.com/zh-cn/library/sk9az15a%28v=vs.71%29.aspx
在browserCaps部分中添加一个正则表达式以匹配WOW64字符串,以检测客户端平台是否为64位(我不确定与在64位上运行的非Windows平台等效的WOW64)。
...当然,通过在元素中使用正则表达式,除了实际解析UserAgent字符串外,您什么都没有做。 但是,您可以在网上轻松找到预定义的browserCaps(例如, http: //owenbrady.net/browsercaps/CodeProject.xml)。
请记住,尽管此功能非常强大,但仍不是100%准确。 例如,Windows 7和Windows Server 2008 R2都将Windows NT 6.1作为平台返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.