У нас есть приложение, которое использует Request.Browser.MajorVersion
как часть ключа кеша. У нас есть задача определить, какой ключ кеша использовался для набора исторических запросов. Для этого мы анализируем журналы IIS, поэтому необходимо определить, какое значение было бы для ASP.NET Request.Browser.MajorVersion
для каждого запроса. Можно ли получить это только из строки пользовательского агента?
UPDATE
Первоначально предполагалось, что значение 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 Degrees, которая перехватывает запрос и применяет собственный анализ запроса заголовок, в этом случае с использованием базы данных, установленной локально на сервере приложений. Эта база данных устарела и, следовательно, создает странные результаты для последних версий браузера. Мои данные в обновлении 2 выше действительны для приложений ASP.NET для ванилин, но это объясняет, почему мои результаты расходились с тестовой средой ванили. Спасибо всем, кто пощадил время, чтобы помочь мне расследовать это.