文章編號: 910442 - 上次校閱: 2007年1月15日 - 版次: 1.3

使用 ASP.NET 2.0 中的 Web 資源

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
ASP.NET 支援語音資料行

使用 ASP.NET 2.0 中的 Web 資源

若要自訂您的需要此資料行的 我們想要邀請您送出您的想法,有關您感興趣的主題,而且在將來知識庫文件和支援語音資料行,處理您想要查看的問題。您可以送出您的想法和使用 Ask For It (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) 表單的意見反應。另外還有連結至表單底部的 這個資料行。

在此頁中

全部展開 | 全部摺疊

簡介

嗨!我的名稱是 Praveen Yerneni,我是一個技術指導人員在 Microsoft 使用 ASP.NET 支援群組。本月份的欄中我會討論 Web 資源,以及如何實作應用程式中。

如果您是開發人員誰廣泛地搭配 COM 控制項,您可能會有用本文中定址的一些關鍵開發控制項時可能面對的問題。先前,Microsoft ASP.NET 1.1 中如果您想要使用 COM 控制項部署靜態檔案,例如.html 檔案、.css 檔案、 影像檔及指令碼檔案您必須建立安裝程式,並連結與 COM 控制項一起這些檔案的相同。雖然這正常運作,但它時部署控制項呈現許多問題。比方說您可能已發生版本衝突,以確定檔案 (例如影像已部署至相同的位置或與損毀或已刪除可能會造成失敗控制項的靜態檔案的問題。

Web Microsoft ASP.NET 2.0 中的資源讓這些資源嵌入組件做.resources 開發人員解決這些問題。若要存取這些靜態資源,您可以只是在控制項的程式碼中呼叫方法。

您可以從 Microsoft 下載中心 」 下載本文的範例程式碼。

從 「 Microsoft 下載中心 」 下載下列檔案有:
摺疊此圖像展開此圖像
Download
Download the ConsumeControl.exe package now. (http://download.microsoft.com/download/a/6/c/a6cb843e-7eda-42fb-ade5-1f77d893c1e3/consumecontrol.exe)
摺疊此圖像展開此圖像
Download
Download the SimpleControl.exe package now. (http://download.microsoft.com/download/a/6/c/a6cb843e-7eda-42fb-ade5-1f77d893c1e3/simplecontrol.exe)
如需有關如何下載 Microsoft 支援檔案的詳細資訊,按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
119591? (http://support.microsoft.com/kb/119591/ ) 如何從線上服務取得 Microsoft 的支援檔案
Microsoft 已掃描這個檔案有無病毒。Microsoft 使用已張貼檔案的日期中的 [可用的最新病毒偵測軟體。檔案儲存在安全性強化的伺服器上,協助防止未經授權的任何變更的檔案。

Web 資源的工作

Web 資源依賴於特殊的處理常式,名為設計來擷取組件資源,並提供至 Web 瀏覽器的 WebResource.axd。最 AssemblyResourceLoader WebResource.axd 該處理常式型別。

當有要求進入從 WebResource.axd 用戶端時,處理常式會尋找 Web 資源識別項,在 要求 物件的 QueryString 方法中。根據 Web 資源識別項的值,處理常式接著嘗試載入組件包含此資源。如果這項作業成功,處理常式會再尋找組件屬性,並從組件載入資源資料流。最後,處理常式將抓取資源資料流中的資料,並將它傳送給用戶端搭配內容在組件屬性中指定的型別。

對於 URL WebResource.axd 看起來如下所示:
WebResource.axd?d=SbXSD3uTnhYsK4gMD8fL84_mHPC5jJ7lfdnr1_WtsftZiUOZ6IXYG8QCXW86UizF0&t=632768953157700078
此 URL 的格式是 WebResource.axd?d= encrypted identifier (& I) t =time stamp value。"d"代表要求的 Web 資源。「 t 」 是時間戳記要求組件可以協助判斷是否已對該資源的任何變更。

探究程式碼

在我的範例,我已經開發 ASP.NET Web 應用程式來示範這項新功能所消耗的 COM 控制項。

Web 資源的 COM 控制項

我已經建立與內嵌 Web 資源,開發 COM 控制項 (SimpleControl)。它有下列的內嵌的資源:
  • 兩個影像 smallFail.gif 和 smallSuccess.gif 命名的檔案。這些影像檔案使用的控制項中的變換效果,耗用控制項程式碼內。
  • 名為 Help.htm HTML 檔案。這個檔案不包含多文字,並且是僅供示範。
  • 一個 JavaScript 檔案名為 MyScript.js。這個檔案包含一些 JavaScript 程式碼,它也示範 [替代] 功能,可以取得另一個相同的組件內的內嵌資源的參考。
  • 一個.css 檔,稱為 MyStyleSheet.css。這個樣式表然後耗用直接從 ASP.NET Web 應用程式。
在這篇文章,我將探討所需的 Web 資源的部分。
內嵌網頁資源
首先,您必須確定會加入至 Web 控制項程式庫專案,在 Microsoft Visual Studio 2005 中的所有靜態檔案是內嵌的資源。若要將內嵌這些資源,所要做的全部是將這些檔案加入至 Visual Studio,然後再修改這些檔案的內容,以便建置動作將設定為 [內嵌資源

您完成後也必須確定如下所示,已被 WebResource 組件屬性 AssemblyInfo.cs 檔案中參考這些資源
[assembly: WebResource("SimpleControl.Help.htm", "text/html")]
[assembly: WebResource("SimpleControl.MyStyleSheet.css", "text/css")]
[assembly: WebResource("SimpleControl.smallFail.gif", "image/gif")]
[assembly: WebResource("SimpleControl.smallSuccess.gif", "image/gif")]
[assembly: WebResource("SimpleControl.MyScript.js", "text/javascript", PerformSubstitution = true)]

WebResource 的組件屬性都有三個參數,如下所示:
  • Web 資源: 內嵌於組件中該資源的名稱
  • ContentType: 資源的 [MIME 檔案類型
  • PerformSubstitution: A 布林 (Boolean) 值,判斷此資源中所參考的其他 Web 資源 URL 是否正在剖析,並取代之資源的完整路徑
擷取 Web 資源
用於取得 Web 資源,我使用 GetWebResourceUrl 方法是通常用於管理用戶端指令碼 ClientScriptManager 類別的方法。 這個方法會傳回至內嵌於組件的伺服器端資源的 URL 參考。GetWebResourceUrl 方法接受下列兩個參數:
  • 型別: 伺服器端資源的類型
  • 資源名稱: 伺服器端資源的名稱
To use this method, first you have to create an instance of the ClientScriptManager class and get the type of the class as shown below.
ClientScriptManager cs = Page.ClientScript;
            Type rsType = this.GetType();

When you have an instance of this class, you then have to call this method and pass the appropriate parameters as shown below, where I create a HyperLink button, and set the NavigateURL method to point to an embedded HTML resource.
HyperLink hlHelpFile = new HyperLink();
            hlHelpFile.NavigateUrl = cs.GetWebResourceUrl(rsType, "SimpleControl.Help.htm");
            hlHelpFile.Attributes.Add("onmouseover", "ChangeImage('image1','Red')");
            hlHelpFile.Attributes.Add("onmouseout", "RollbackImage('image1','Green')");
            
            this.Controls.Add(hlHelpFile);

            Image imgTest = new Image();
            imgTest.ImageUrl = cs.GetWebResourceUrl(rsType, "SimpleControl.smallFail.gif");
            imgTest.ID = "image1";
            hlHelpFile.Controls.Add(imgTest);

Also in the same code listing above, I have created an Image button and the ImageUrl attribute is getting its value from another embedded .gif image resource.
使用替代功能
上述 「 內嵌 Web 資源 」 一節中所示,另一項實用的功能使用 Web 資源的會是 WebResource 屬性的 PerformSubstitution 屬性。這項功能可讓您實際取得另一個內嵌的資源內的 [Web 資源。如果啟用此屬性,則 WebResource 處理常式會剖析內嵌的資源,並以實際資源取代 WebResource 組件屬性的語法之前提供服務的頁面。

在上述程式碼中,您會發現 HyperLink 控制項具有名為 ChangeImage 的用戶端事件。這個 ChangeImage 函式] 位於 [指令碼檔案。下列是這個 script.
function ChangeImage(imgControl,varcolor){
   document.getElementById(imgControl).src = '<%= WebResource("SimpleControl.smallSuccess.gif")%>';
    document.getElementById('Label1').style.color = varcolor;
}

function RollbackImage(imgControl, varcolor){
   document.getElementById(imgControl).src = '<%= WebResource("SimpleControl.smallFail.gif")%>';
   document.getElementById('Label1').style.color = varcolor;
}
名為 MyScript.js 這個指令碼檔案也是在相同的 COM 控制項中的內嵌的資源。並請注意,我正在使用 WebResource 方法來參考另一個指令碼檔案中的內嵌資源。

而且,以確定在網頁中註冊此 JavaScript 檔案,我使用的 ClientScriptManager 類別 RegisterClientScriptInclude 方法,如下所示
cs.RegisterClientScriptInclude("MyScript", cs.GetWebResourceUrl(rsType, "SimpleControl.MyScript.js"));

耗用在 ASP.NET 控制項

一旦您已成功地建置 COM 控制項,您需要耗用用戶端 ASP.NET 專案中的這個控制項。若要執行此動作只需將控制項加入至在 ASP.NET 工具箱。然後您就可以將控制項加入設計工具中的任何 Web 表單。

將控制項加入工具箱時控制項為您登錄,當您查看 HTML 語法時,會加入下列程式碼
<cc1:MSButton ID="MSButton1" runat="server" strText="Problems?"></cc1:MSButton>
在我的 COM 控制項我也有內嵌在我的 ASP.NET 應用程式會使用一個樣式表檔案。若要存取這個樣式表,您擁有在 HTML 網頁中新增連結 HtmlControl,並將 runat 屬性設定為 伺服器,如下所示
<link rel="Stylesheet"  id="lnkStyle" runat="server"  />
之後,您可以以程式設計方式將 Href 屬性設定這個控制項,以指向 WebResource 組件屬性在 Page_Load 事件中,如下所示的為
protected void Page_Load(object sender, EventArgs e)
    {
        //Get the name of the Web Resource.
        String rsname = "SimpleControl.MyStyleSheet.css";
        
        //Get the type of the class.
        Type rstype = typeof(SimpleControl.MSButton);

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;
        lnkStyle.Href = cs.GetWebResourceUrl(rstype, rsname);
     }

當您執行程式碼時,您將會看到控制項,看起來像下列:
摺疊此圖像展開此圖像
 small fail
並在滑鼠移過控制項將會看起來如下所示:
摺疊此圖像展開此圖像
 small success
當您按一下此連結時, 它將會帶領您到內嵌在 COM 控制項組件檔案中的 [說明] 網頁。

結論

Web 資源是非常有用的新功能,在 ASP.NET 2.0。如果明智地使用,您可以使用這項功能給您的優點。已使用許多的快取技術以確定 Web 資源不會影響應用程式的效能。

在 ASP.NET 2.0 WebResource.axd 是由於內部使用 Microsoft.NET Framework,以擷取內嵌的資源。比方說.NET Framework 會使用 WebResource.axd 取得用於 驗證 控制項的 WebUIValidation.js 指令碼檔案,並擷取 Menu.js 指令碼檔案的 功能表 控制項。

參考

如需詳細資訊請造訪下列 Microsoft 網站]:
ClientScriptManager.GetWebResourceUrl 方法
http://msdn2.microsoft.com/en-us/library(d=robot)/system.web.ui.clientscriptmanager.getwebresourceurl.aspx (http://msdn2.microsoft.com/en-us/library(d=robot)/system.web.ui.clientscriptmanager.getwebresourceurl.aspx)

WebResourceAttribute 類別
http://msdn2.microsoft.com/en-us/library(d=robot)/system.web.ui.webresourceattribute.aspx (http://msdn2.microsoft.com/en-us/library(d=robot)/system.web.ui.webresourceattribute.aspx)

連結與內嵌資源
http://msdn2.microsoft.com/en-us/library/ht9h2dk8.aspx (http://msdn2.microsoft.com/en-us/library/ht9h2dk8.aspx)
更多有關 Web 資源的資訊,請參閱 Nikhil Kothari 由下列的部落格:
與 System.Web.UI.WebResourceAttribute Whats 嗎?
http://www.nikhilk.net/WebResourceAttribute.aspx (http://www.nikhilk.net/WebResourceAttribute.aspx)

拒絕服務攻擊與 Web 資源的緩和
http://www.nikhilk.net/WebResourcesDenialOfServiceAttack.aspx (http://www.nikhilk.net/WebResourcesDenialOfServiceAttack.aspx)
如往常請隨意送出您想要在將來解決資料行的主題或使用 Ask For It (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) 表單的知識庫中的想法。

這篇文章中的資訊適用於:
  • Microsoft ASP.NET 2.0
關鍵字:?
kbmt kbhowto kbasp KB910442 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:910442? (http://support.microsoft.com/kb/910442/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。