1

我想使用Request.Browser属性(HttpBrowserCapabilities类)来确定客户端系统的一些属性。

但是我似乎遇到了这个类的一些限制。我找不到一些应该相对容易从UserAgent字符串中解析的属性,例如操作系统版本(Platform对于大多数 Windows 版本,只会返回 WinNT,但不会返回 Vista、XP 等)或者它是否是 x64(仅Win16Win32特性)。

我本来希望在HttpBrowserCapabilities类中看到这些属性,因为大多数其他用户代理信息都在那里。我错过了什么吗?我可以在其他地方找到这些信息吗?还是我应该自己从 UserAgent 字符串中解析它?

4

2 回答 2

7

browserCaps元素在 ASP.NET 2.0 及更高版本中已弃用。除非您使用的是 .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>

您可能需要触发站点的重新编译以使新文件生效。

注意:这些节点必须是网关节点而不是浏览器节点。如果您尝试将它们创建为浏览器节点,当您的站点重新编译时,您将收到解析器错误

于 2011-07-19T17:50:19.447 回答
4

您可以通过在 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 平台是什么)。

...当然,通过在元素中使用正则表达式,除了自己实际解析 UserAgent 字符串之外,您什么也没做。但是,您可以在网络上轻松找到预定义的 browseCaps(例如http://owenbrady.net/browsercaps/CodeProject.xml)。

请记住,即使此功能非常强大,它仍然不是 100% 准确的。例如,Windows 7 和 Windows Server 2008 R2 都将返回 Windows NT 6.1 作为平台。

于 2011-06-10T12:21:28.510 回答