HttpBrowserCapabilities отсутствует некоторая информация? - PullRequest
1 голос
/ 12 мая 2011

Я бы хотел использовать свойство Request.Browser (HttpBrowserCapabilities класс) для определения некоторых свойств клиентской системы.

Однако я, похоже, столкнулся с некоторыми ограничениями этого класса.Я не могу найти некоторые свойства, которые было бы относительно легко проанализировать из строки UserAgent, например, версия ОС (Platform будет возвращать WinNT только для большинства версий Windows, но не для Vista, XP и т. Д.) Или дляx64 или нет (только свойства Win16 и Win32).

Я бы ожидал увидеть эти свойства в классе HttpBrowserCapabilities, потому что большая часть другой пользовательской информации есть.Я что-то пропустил?Могу ли я найти эту информацию где-нибудь еще?Или я должен просто разобрать его из строки UserAgent сам?

Ответы [ 2 ]

6 голосов
/ 19 июля 2011

Элемент 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>

Возможно, вам потребуется запустить перекомпиляцию сайтачтобы новый файл вступил в силу.

NB: Эти узлы должны быть шлюзом узлами, а не браузером узлами.Если вы попытаетесь создать их как узлы browser , вы получите ошибку синтаксического анализатора , когда ваш сайт перекомпилирует .

3 голосов
/ 10 июня 2011

Вы можете расширить HttpBrowserCapabilities, добавив / расширив раздел конфигурации browserCaps в вашем файле machine.config / web.config.Например, для более точного определения версии ОС добавьте что-то вроде этого в ваш файл конфигурации:

<system.web>
    <browserCaps>
      <use var="HTTP_USER_AGENT" />
      <filter>
        <case match="Windows NT 6.1">
          platform=Windows7
        </case>
      </filter>
    </browserCaps>
  </system.web>

Если вы заходите на веб-сайт с Mozilla, работающей в Windows 7 (UserAgent = "Mozilla / 5.0 (WindowsNT 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-эквивалентдля платформ, отличных от Windows, работающих на 64-битной платформе.)

... Конечно, используя регулярное выражение в элементе, вы ничего не делаете, кроме собственно парсинга строки UserAgent.Тем не менее, вы можете легко найти предопределенные browseCaps в Интернете (например, http://owenbrady.net/browsercaps/CodeProject.xml).

. Имейте в виду, что, хотя эта возможность довольно мощная, она все же не на 100% точна. Например, как Windows 7, так и Windows Server2008 R2 вернет Windows NT 6.1 в качестве платформы.

...