Если вам действительно нужно это сделать, вам лучше найти библиотеку, которая обновляется и поддерживается в хорошем состоянии.

есть приложение, которое используетRequest.Browser.MajorVersion как часть ключа кеша. Перед нами стоит задача определить, какой ключ кэша использовался для набора исторических запросов. Для этого мы анализируем журналы IIS, поэтому необходимо определить, какое значение было бы для ASP.NET.Request.Browser.MajorVersion за каждый запрос. Можно ли получить это из одной строки агента пользователя?

ОБНОВИТЬ

Я изначально предполагал ценностьRequest.Browser.MajorVersion будет версия, взятая непосредственно из строки агента пользователя. Однако в сеансе отладки для подтверждения этой теории я вижу это:

Я бы ожидалRequest.Browser.MajorVersion быть 61, а не 44. Может ли кто-нибудь дать представление о том, почему эти значения отличаются, и как я мог бы с уверенностью сказать, какова ценностьRequest.Browser.MajorVersion будет для данной строки агента пользователя?

ОБНОВЛЕНИЕ 2

Я обнаружил, что ASP.NET использует набор шаблонов для созданияHttpBrowserCapabilities объект установлен какRequest.Browser, Они доступны здесь:

% SystemRoot% \ Microsoft.NET \ Framework [версия] \ Config \ браузеры

Глядя на шаблоны, все они используют регулярные выражения для анализа строки пользовательского агента (я вставил содержимое chrome.browser ниже), что говорит о том, чтоRequest.Browser.MajorVersion должен соответствуют значению в строке агента пользователя. Так что до сих пор не знаю, почему мое локальное приложение возвращает 44 в качестве этого значения.

<browsers>
    <!-- Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.168.0 Safari/530.1 -->
    <browser id="Chrome" parentID="WebKit">
        <identification>
            <userAgent match="Chrome/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
        </identification>

        <capabilities>
          <capability name="browser"                         value="Chrome" />
          <capability name="majorversion"                    value="${major}" />
          <capability name="minorversion"                    value="${minor}" />
          <capability name="type"                            value="Chrome${major}" />
          <capability name="version"                         value="${version}" />
          <capability name="ecmascriptversion"               value="3.0" />
          <capability name="javascript"                      value="true" />
          <capability name="javascriptversion"               value="1.7" />
          <capability name="w3cdomversion"                   value="1.0" />
          <capability name="supportsAccesskeyAttribute"      value="true" />
          <capability name="tagwriter"                       value="System.Web.UI.HtmlTextWriter" />
          <capability name="cookies"                         value="true" />
          <capability name="frames"                          value="true" />
          <capability name="javaapplets"                     value="true" />
          <capability name="supportsCallback"                value="true" />
          <capability name="supportsDivNoWrap"               value="false" />
          <capability name="supportsFileUpload"              value="true" />
          <capability name="supportsMaintainScrollPositionOnPostback" value="true" />
          <capability name="supportsMultilineTextBoxDisplay" value="true" />
          <capability name="supportsXmlHttp"                 value="true" />
          <capability name="tables"                          value="true" />
        </capabilities>
    </browser>
</browsers>

ОБНОВЛЕНИЕ 3

Я наконец дошел до сути этого. Оказывается, что приложение, которое я отлаживал, использовало сторонний сервис под названием51 градус который перехватывает запрос и применяет собственный анализ заголовка запроса, в этом случае используя базу данных, установленную локально на сервере приложений. Эта база данных устарела и, следовательно, дает странные результаты для более поздних версий браузеров. Мои данные в обновлении 2 выше действительны для приложений Vanilla ASP.NET, но это объясняет, почему мои результаты отличались от среды тестирования Vanilla. Спасибо всем, кто пожалел время, чтобы помочь мне разобраться в этом.

Ответы на вопрос(1)

Ваш ответ на вопрос