1

Request.Browserプロパティ (HttpBrowserCapabilitiesクラス) を使用して、クライアントのシステムのプロパティを特定したいと考えています。

ただし、このクラスのいくつかの制限に遭遇したようです。UserAgentOS バージョン (ほとんどの Windows バージョンでは WinNT のみを返しますPlatformが、Vista、XP などでは返されません)、または x64 であるかどうか (Win16およびWin32プロパティ)。

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 を拡張できます。たとえば、OS のバージョンをより正確に検出するには、次のような内容を構成ファイルに追加します。

<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") で Web サイトにアクセスすると、その Request.Browser が表示されます。プラットフォームは「Windows7」と表示されます。詳細については、http: //msdn.microsoft.com/en-us/library/sk9az15a%28v=vs.71%29.aspxを参照してください。

クライアント プラットフォームが 64 ビットかどうかを検出するために、WOW64 文字列に一致するように browserCaps セクションに正規表現を追加します (64 ビットで実行されている Windows 以外のプラットフォームで WOW64 に相当するものが何であるかはわかりません)。

...もちろん、要素で正規表現を使用することで、UserAgent 文字列を自分で実際に解析する以外に何もしていません。ただし、定義済みの browserCaps は Web 上で簡単に見つけることができます (例: http://owenbrady.net/browsercaps/CodeProject.xml )。

この機能は非常に強力ですが、100% 正確ではないことに注意してください。たとえば、Windows 7 と Windows Server 2008 R2 はどちらも Windows NT 6.1 をプラットフォームとして返します。

于 2011-06-10T12:21:28.510 に答える