ASP.Net有很好的機制來識別用戶的浏覽器: 用Request.Browser就可以拿到一個 HttpBrowserCapabilities,然後用相應的屬性可以取到值,比較浏覽器類型,屏幕大小,JS支持等等。 對於移動設備更可以這麼用,很容易拿到需要的屬性(當然ASP.Net自帶的浏覽器庫還是很不全)。
但是怎樣在WinApp裡根據UserAgent識別浏覽器呢?我通過Reflector看到主要是在 BrowserCapabilitiesFactory這個類中對浏覽器的Capability進行設置,於是把裡面的一部分代碼拿出來 ,發現果然可以用:
1string UA = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; InfoPath.2; MS-RTC LM 8)"; 2 3BrowserCapabilitiesFactory f = new BrowserCapabilitiesFactory(); 4HttpBrowserCapabilities browserCaps = new HttpBrowserCapabilities(); 5Hashtable hashtable = new Hashtable(180, StringComparer.OrdinalIgnoreCase); 6hashtable[string.Empty] = UA; 7browserCaps.Capabilities = hashtable; 8NameValueCollection headers = new NameValueCollection(); 9 10f.ConfigureBrowserCapabilities(headers, browserCaps);
這樣在browserCaps類裡拿到浏覽器的各種屬性。
更進一步,因為ASP.Net自帶的BrowserCapabilities太少,如果要自己為應用程序加一些UA的識別, 特別是移動設備等,可以用.Net 2.0支持的Browser添加機制(大概微軟會發布一些最新移動設備 的.Browser文件)。具體方法如下:
1、用VS新建一個Website,"Add ASP.Net Folder" - "App_Browsers",把下載到或自己寫的.Browser 文件放到裡面。
2、Publish Web Site, 到編譯出來的目錄下找到bin目錄,有一個App_Browsers.dll。
3、到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目錄下運行:
aspnet_regbrowsers.exe -i
這樣在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers目錄下可以拿到一個 ASP.BrowserCapsFactory.dll。
4、在你的應用程序裡引用App_Browsers.dll和ASP.BrowserCapsFactory.dll,把最上面那段代碼中的 BrowserCapabilitiesFactory f = new BrowserCapabilitiesFactory();改成:
ASP.ApplicationBrowserCapabilitiesFactory f = new ASP.ApplicationBrowserCapabilitiesFactory();
就可以在你的應用程序裡用UA識別出浏覽器了!