É possível no ASP.NET derivar o navegador MajorVersion apenas da cadeia de agentes do usuário da solicitação HTTP?

Temos um aplicativo que usaRequest.Browser.MajorVersion como parte de uma chave de cache. Temos um desafio para determinar qual chave de cache foi usada para um conjunto de solicitações históricas. Para fazer isso, estamos analisando os logs do IIS, portanto, precisamos determinar qual seria o valor para o ASP.NETRequest.Browser.MajorVersion para cada solicitação. É possível derivar isso apenas da cadeia de caracteres do agente do usuário?

ATUALIZAR

Eu originalmente assumi o valor deRequest.Browser.MajorVersion seria a versão obtida diretamente da sequência do agente do usuário. No entanto, em uma sessão de depuração para confirmar essa teoria, vejo o seguinte:

Eu teria esperadoRequest.Browser.MajorVersion 61, não 44. Alguém pode me dar uma idéia de por que esses valores diferem e como eu posso dizer com confiança qual é o valor deRequest.Browser.MajorVersion seria para uma determinada sequência de agentes do usuário?

ATUALIZAÇÃO 2

Eu descobri que o ASP.NET usa um conjunto de modelos para criar oHttpBrowserCapabilities objeto definido comoRequest.Browser. Estes estão disponíveis aqui:

% SystemRoot% \ Microsoft.NET \ Framework [versão] \ Config \ Navegadores

Observando os modelos, todos eles usam regex para analisar a cadeia de caracteres do agente do usuário (colei o conteúdo de chrome.browser abaixo), o que sugere queRequest.Browser.MajorVersion devemos corresponde ao valor na sequência do agente do usuário. Portanto, ainda não faço ideia do motivo pelo qual meu aplicativo local está retornando 44 como esse valor.

<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>

ATUALIZAÇÃO 3

Finalmente cheguei ao fundo disso. Acontece que o aplicativo que eu estava depurando estava usando um serviço de terceiros chamado51 Graus que intercepta a solicitação e aplica sua própria análise do cabeçalho da solicitação, nesse caso, usando um banco de dados instalado localmente no servidor de aplicativos. Esse banco de dados ficou desatualizado e, portanto, produzia resultados estranhos para mais versões recentes de navegadores. Meus detalhes na Atualização 2 acima são válidos para aplicativos ASP.NET de baunilha, mas isso explica por que meus resultados foram diferentes de um ambiente de teste de baunilha. Obrigado a todos que pouparam tempo para me ajudar a investigar isso.

questionAnswers(1)

yourAnswerToTheQuestion