8

したがって、HttpRequestBaseクラスには、 HttpBrowserCapabilitiesBaseを返すBrowser プロパティがあります。現在、一部の MVC インフラストラクチャ コードでこのプロパティを使用して、ブラウザー名やバージョン番号などを取得します (ログへの出力用)。

ServiceStackを使用する API もあり、これを既存のインフラストラクチャにフックできるようにしたいと考えています。唯一欠けているのは、UserAgent ヘッダー (IHttpRequest.UserAgent のおかげでこれができました) からブラウザー名とバージョンを解析できることですが、それを解析する方法が必要です。

私の質問 - UserAgent 文字列だけで何とか HttpBrowserCapabilitiesBase を作成することは可能ですか? msdn で使用できる唯一のサブタイプはHttpBrowserCapabilitiesWrapperで、その唯一の ctor は別の HttpBrowserCapabilitiesBase です。

とにかく、このクラスはおそらく UserAgent 文字列のみを解析すると考えていたので、なぜ ctor(string) がないのでしょうか?? これを達成できるサブタイプ、ファクトリ、または静的メソッドはありませんか?

一般的に、私は怠惰のためにこれを行っているだけです-.Netにその機能があることがわかっている場合、別のUserAgentパーサーを作成/検索したくありません。

4

1 に答える 1

10

私は自分でこれをしなければなりませんでした。これが私が試したものです。から逆コンパイルされSystem.Webていますが、まだそのライブラリに依存しています。私はまだそれをテストしていますが、多分それはあなたを助けるでしょう:

public class BrowserCapabilities
{

    public static HttpBrowserCapabilities 
        GetHttpBrowserCapabilities(NameValueCollection headers, string userAgent)
    {
        var factory = new BrowserCapabilitiesFactory();
        var browserCaps = new HttpBrowserCapabilities();
        var hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase);
        hashtable[string.Empty] = userAgent;
        browserCaps.Capabilities = hashtable;
        factory.ConfigureBrowserCapabilities(headers, browserCaps);
        factory.ConfigureCustomCapabilities(headers, browserCaps);
        return browserCaps;
    }
}

テストする:

var features = BrowserCapabilities.GetHttpBrowserCapabilities(null, 
    "Mozilla/4.0    (compatible; MSIE 7.0; Windows NT 6.0)");
Console.WriteLine(features.Browser);
于 2013-03-13T17:29:51.807 に答える