使用 Web.config 文件中的 browserCaps 元素來定義瀏覽器的行爲在 .NET Framework 2.0 中被否決,但仍受支持。此元素中的數據與瀏覽器定義文件 (.browser) 中的信息合併在一塊兒。在本次學習將會連帶.browser文件的相關內容 web
元素編程 |
說明瀏覽器 |
filter緩存 |
可選的元素。 服務器 指定搜索字符串列表,經過這些字符串能夠將各個設置分別應用於特定的瀏覽器定義。cookie |
result架構 |
指定 HttpCapabilitiesBase 派生類,該類用於保存分析 browserCaps 節所得的結果。這些功能針對各個瀏覽器存儲爲鍵/值字符串對。 工具 此元素在 .NET Framework 2.0 版中仍然適用。學習 |
usespa |
指定 HTTP 請求字符串,該字符串用於分析存儲在 filter 和 case 元素中的瀏覽器功能信息。 |
另外filter包含子元素case,case中則是filter篩選事後保存的結果。結果以鍵值對形式,保存到result中執行的類型中。至於篩選的對象則是use元素中指定的HTTP頭請求字段。
以下面的配置,定死了匹配的USER-AGENT包含Chrome/52.0.2743.116,那給瀏覽器的功能設置則是browser到cookies這部分信息。
<browserCaps> <use var="HTTP_USER_AGENT"/> <filter> <case match="Chrome/52.0.2743.116"> browser=Chrome version=52 majorver=52 minorver=0 hopegi=mr.hopegi cookies=false </case> </filter> </browserCaps>
若想在代碼中獲取瀏覽器的功能,則經過下面的方式。
object cookies = Request.Browser.Cookies; cookies = Request.Browser["cookies"]; var hg = Request.Browser["hopegi"];
按峯哥介紹的,*.broswer文件是用於給IIS判斷當前發請求過來的瀏覽器的類型。而判斷出這個瀏覽器類型以後,對響應或者響應內容做出不一樣的更改。如未識別的瀏覽器且默認瀏覽器對cookies則斷定爲不支持cookies,那在Forms認證時,驗證票則不會經過cookie形式保存到瀏覽器,結果那瀏覽器有可能沒法正常經過認證。
而*.browser文件是在.NET Framework2.0中推出的,例子以下
對User-Agent的匹配在userAgent match一節。對瀏覽器功能的定義在<capabilities>一節中。
預約義的瀏覽器定義文件存儲在 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中。應用程序級別的瀏覽器定義文件能夠放在應用程序的 App_Browsers 目錄中。在這兩個位置中,瀏覽器定義文件都必須具備 .browser 文件擴展名。不要更改 ASP.NET 隨附的瀏覽器定義文件,由於 Service Pack 可能會更新這些文件,從而改寫您所作的更改。相反,您應該建立新的 .browser 文件,並在新的 browser 定義中使用 parentID 屬性來繼承設置,或者使用 refID 屬性向現有的瀏覽器定義添加功能。
在運行時,瀏覽器定義文件信息將合併到 BrowserCapabilitiesFactory 對象中的已知瀏覽器的集合內。發出請求時,ASP.NET 根據請求標頭標識請求的瀏覽器,並編譯一個與請求的瀏覽器類型相對應的 HttpBrowserCapabilities 對象。這一步是這樣完成的:在開始時使用一個空字典,而後對瀏覽器定義樹應用如下遞歸步驟:
HttpBrowserCapabilities 對象被寫入緩存,能夠被來自同一類型的瀏覽器發出的其餘請求再次使用。
對位於 App_Browsers 目錄中的 .browser 文件所作的更改會使緩存無效,而且下一次請求將致使應用程序從新編譯。可是,若是對 %SystemRoot%\Microsoft.NET\Framework\version\CONFIG\Browsers 目錄中的 .browser 文件作出了更改,您必須使用 %SystemRoot%\Microsoft.NET\Framework\version\aspnet_regbrowsers.exe 工具手動從新編譯應用程序,或者使用 BrowserCapabilitiesCodeGenerator 類以編程方式從新編譯應用程序。
總結一下,browserCaps 元素和browser文件都是爲了定義瀏覽器的功能,對於瀏覽器而言,它把請求發往服務器,告知服務器自身信息是經過User-Agent請求頭。而服務器判定請求來自於哪一個瀏覽器甚至於當前發來請求的瀏覽器具有哪些功能,此時須要這個瀏覽器功能設置的配置信息。它按照請求頭的信息(一般是User-Agent)匹配,匹配成功後判定瀏覽器的類型。從而也肯定瀏覽器具有的功能。另外鬱悶的是在應用程序目錄中建的App_Browser文件夾中的browser文件都不生效。
參考
browserCaps 元素(ASP.NET 設置架構)
https://msdn.microsoft.com/zh-cn/library/sk9az15a(VS.80).aspx
瀏覽器定義文件架構(browsers 元素)
https://msdn.microsoft.com/zh-cn/library/ms228122(v=vs.80).aspx