ClientTarget を利用すると ASP.NET によるブラウザの判定を自由に設定できます。
下の画像は、IE9 でアクセスして(一番上の行の HttpRequest.UserAgent プロパティで取得した User Agent 参照)、HttpBrowserCapabilities が Firefox30 と判定されている例です。
例えば、開発環境で IE11 を持ってなくても、IE11 でアクセスした場合に ASP.NET がどのような html や JavaScript をレンダリングするかを調べるなどに役立つと思います。
ただ、User Agent を偽装するなら Fiddler2 を使えばもっと簡単にできます。なので、あまり使い道はないかもしれませんが、せっかく調べたので書いておきます。
web.config の clientTarget 要素の add 子要素 に任意のブラウザのエイリアスと User Agent を設定します。
ASP.NET 4 の場合、ルート(C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config)の web.config を調べてみると、uplevel と downlevel が定義済みでした。
しかし、appcmd コマンドで調べてみると、以下の画像の通り、uplevel と downlevel に加えて、何故か ie4 と ie5 も定義されています。自分で ie4 と ie5 の定義を追加した覚えはないのですが・・・
ところが、@ Page ディレクティブの ClientTarget 属性で ie4 を指定すると "ClientTarget が無効なエイリアス 'ie4' に設定されています。<clientTarget> 構成セクションは ClientTarget エイリアスを定義するために使用されます。" というエラーになります。(ie5 も同様にエラー。uplevel と downlevel は問題なし) 理由はどうしても分かりません。(汗)
やむをえず、以下のように一旦全て clear して、ie4, ie5, uplevel, downlevel を定義しなおし、IE11 と Firefox30 の定義を追加して検証しました。
<clientTarget>
<clear/>
<add alias="ie4"
userAgent="Mozilla/4.0 (compatible; MSIE 4.0; Windows NT 4.0)"/>
<add alias="ie5"
userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0)"/>
<add alias="uplevel"
userAgent="Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.1)" />
<add alias="downlevel"
userAgent="Generic Downlevel" />
<add alias="ie11"
userAgent="Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko"/>
<add alias="ff30"
userAgent="Mozilla/5.0 (Windows NT 6.0; rv:30.0) Gecko/20100101 Firefox/30.0"/>
</clientTarget>
Page.ClientTarget プロパティ のページに書いてありますように、@ Page ディレクティブの ClientTarget 属性に、上の alias 属性に指定された文字列を設定すると、ASP.NET によるブラウザ検出機能が無効になり、userAgent 属性に指定された User Agent 文字列を使ってブラウザが判定されます。
一番上の画像のページの例では @ Page ディレクティブ で ClientTarget="ff30" としているので、実際にアクセスしているのは IE9 ですが、Firefox30 の User Agent でブラウザ判定が行われ、その判定結果が HttpBrowserCapabilities オブジェクトに反映されています。
一番上の画像を出力したコードを参考にアップしておきます。
protected string GetBrowswerCapabilities()
{
HttpBrowserCapabilities browser = Request.Browser;
StringBuilder sb = new StringBuilder();
sb.Append("User Agent: " + Request.UserAgent +
"<br /><br />");
sb.Append("HttpBrowserCapabilities are:<br />");
sb.AppendFormat("Type = {0}<br />",
browser.Type);
sb.AppendFormat("Name = {0}<br />",
browser.Browser);
sb.AppendFormat("Version = {0}<br />",
browser.Version);
sb.AppendFormat("Major Version = {0}<br />",
browser.MajorVersion);
sb.AppendFormat("Minor Version = {0}<br />",
browser.MinorVersion);
sb.AppendFormat("Platform = {0}<br />",
browser.Platform);
sb.AppendFormat("Is Beta = {0}<br />",
browser.Beta);
sb.AppendFormat("Is Crawler= {0}<br />",
browser.Crawler);
sb.AppendFormat("Is AOL = {0}<br />",
browser.AOL);
sb.AppendFormat("Is Win16 = {0}<br />",
browser.Win16);
sb.AppendFormat("Is Win32 = {0}<br />",
browser.Win32);
sb.AppendFormat("Supports Frames = {0}<br />",
browser.Frames);
sb.AppendFormat("Supports Tables = {0}<br />",
browser.Tables);
sb.AppendFormat("Supports Cookies = {0}<br />",
browser.Cookies);
sb.AppendFormat("Supports VBScript = {0}<br />",
browser.VBScript);
sb.AppendFormat("Supports JavaScript = {0}<br />",
browser.EcmaScriptVersion.ToString());
sb.AppendFormat("Supports Java Applets = {0}<br />",
browser.JavaApplets);
sb.AppendFormat("Supports ActiveX = {0}<br />",
browser.ActiveXControls);
return sb.ToString();
}