如何:在線上 ClickOnce 應用程式中擷取查詢字串資訊
「查詢字串」(Query String) 是以問號 (?) 當做開頭的 URL 部分,其中包含 name=value 格式的任意資訊。 假設您在 servername 上裝載名為 WindowsApp1 的 ClickOnce 應用程式,而且想要在應用程式啟動時為變數 username 傳入值, 那麼這個 URL 可能看起來如下:
http://servername/WindowsApp1.application?username=joeuser
下列兩個程序示範如何使用 ClickOnce 應用程式取得查詢字串資訊。
注意事項 |
---|
您只有在使用 HTTP (而不是使用檔案共用或本機檔案系統) 啟動應用程式時,才可以在查詢字串中傳遞資訊。 |
第一個程序示範 ClickOnce 應用程式如何使用一小段程式碼,在應用程式首次啟動時讀取這些值。
第二個程序則示範如何使用 MageUI.exe 設定 ClickOnce 應用程式,讓它能夠接受查詢字串參數。 每當您發行應用程式時,就必須這麼做。
注意事項 |
---|
請在決定啟用這項功能之前,先參閱本主題之後的<安全性>一節。 |
如需如何使用 Mage.exe 或 MageUI.exe 建立 ClickOnce 部署的詳細資訊,請參閱逐步解說:手動部署 ClickOnce 應用程式。
注意事項 |
---|
從 .NET Framework 3.5 SP1 開始,您可以將命令列引數傳遞至離線 ClickOnce 應用程式。如果您想要對應用程式提供引數,可以在參數中傳遞至副檔名 .APPREF-MS 的捷徑檔。 |
若要從 ClickOnce 應用程式取得查詢字串資訊
將下列程式碼放置在專案中。 為了讓這段程式碼可以運作,您必須參考 System.Web,並針對 System.Web、System.Collections.Specialized 和 System.Deployment.Application 加入 using 或 Imports 陳述式。
Private Function GetQueryStringParameters() As NameValueCollection Dim NameValueTable As New NameValueCollection() If (ApplicationDeployment.IsNetworkDeployed) Then Dim QueryString As String = ApplicationDeployment.CurrentDeployment.ActivationUri.Query NameValueTable = HttpUtility.ParseQueryString(QueryString) End If GetQueryStringParameters = NameValueTable End Function
private NameValueCollection GetQueryStringParameters() { NameValueCollection nameValueTable = new NameValueCollection(); if (ApplicationDeployment.IsNetworkDeployed) { string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query; nameValueTable = HttpUtility.ParseQueryString(queryString); } return (nameValueTable); }
呼叫先前定義的函式以擷取查詢字串參數的 Dictionary (依名稱索引排列)。
若要以 MageUI.exe 啟用 ClickOnce 應用程式中的查詢字串傳遞
開啟 .NET 命令提示字元並輸入:
MageUI
從 [檔案] 功能表,選取 [開啟],並開啟 ClickOnce 應用程式的部署資訊清單,也就是以 .application 副檔名為結尾的檔案。
選取左手邊巡覽視窗中的 [部署選項] 面板,然後選取 [允許傳遞 URL 參數至應用程式] 核取方塊。
從 [檔案] 功能表選取 [儲存]。
注意事項 |
---|
此外,您也可以啟用 Visual Studio 中的查詢字串傳遞。請選取 [允許傳遞 URL 參數至應用程式] 核取方塊。只要開啟 [專案屬性],選取 [發行] 索引標籤,然後按一下 [選項] 按鈕,再選取 [資訊清單] 即可看見此核取方塊。 |
穩固程式設計
當您使用查詢字串參數時,請務必仔細考量要如何安裝及啟動應用程式。 如果您的應用程式設定為從 Web 或從網路共用資料夾安裝到使用者的電腦上,則使用者很可能只會透過 URL 啟動應用程式一次。 在那之後,使用者通常會使用 [開始] 功能表內的捷徑啟動您的應用程式。 因此,您的應用程式一定只會在其存留期 (Lifetime) 期間收到查詢字串引數一次。 如果您選擇要將這些引數儲存到使用者的電腦上供未來使用,您必須負責使用安全的方法將這些引數儲存在安全的地方。
如果您的應用程式只能在線上使用,則永遠會透過 URL 啟動。 不過,即使在這種情形下,您的應用程式也必須撰寫為能夠在查詢字串參數遺失或損毀時正常運作。
安全性
只有當您打算先清除任何惡意字元的輸入後再使用該輸入時,才允許將 URL 參數傳遞給您的 ClickOnce 應用程式。 例如,如果將包含內嵌引號、斜線或分號的字串,未經篩選就用於針對資料庫發出的 SQL 查詢中,該字串可能會執行任意的資料作業。 如需查詢字串安全性的詳細資訊,請參閱Script Exploits Overview。