我想使用Request.Browser
属性(HttpBrowserCapabilities
类)来确定客户端系统的某些属性。
但是我似乎遇到了这个课程的一些限制。我找不到一些应该相对容易从UserAgent
字符串解析的属性,就像操作系统版本一样(Platform
只返回大多数Windows版本的WinNT,而不是Vista,XP等。 )或者它是否为x64(仅Win16
和Win32
属性)。
我希望在HttpBrowserCapabilities
类中看到这些属性,因为大多数其他用户代理信息都在那里。我错过了什么吗?我可以在其他地方找到这些信息吗?或者我应该自己从UserAgent字符串解析它?
答案 0 :(得分:6)
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>
您可能需要触发重新编译网站才能使新文件生效。
NB:这些节点必须是网关节点,而不是浏览器节点。如果您尝试将其创建为浏览器节点,则会获得parser error when your site recompiles。
答案 1 :(得分:3)
您可以通过在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/en-us/library/sk9az15a%28v=vs.71%29.aspx
在browserCaps部分添加一个正则表达式以匹配WOW64字符串,以便检测客户端平台是否为64位(我不确定WOW64等效于64位运行的非Windows平台)。 / p>
...当然,通过在元素中使用正则表达式,除了实际自己解析UserAgent字符串之外别无其他。但是,您可以在网络上轻松找到预定义的browseCaps(例如http://owenbrady.net/browsercaps/CodeProject.xml)。
请记住,即使此功能非常强大,它仍然不是100%准确。例如,Windows 7和Windows Server 2008 R2都将返回Windows NT 6.1作为平台。