HOW TO:在 ClickOnce 應用程式中擷取查詢字串資訊
更新:2007 年 11 月
「查詢字串」(Query String) 是以問號 (?) 當做開頭的 URL 部分,其中包含 name=value 格式的任意資訊。假設您擁有在 servername 裝載,名為 WindowsApp1 的 ClickOnce 應用程式,而且要在應用程式啟動時傳入變數 username 的值。您的 URL 可能會像以下所示:
https://servername/WindowsApp1.application?username=joeuser
下列兩個程序會示範如何使用 ClickOnce 應用程式來取得查詢字串資訊。
第一個程序會示範如何使用 MageUI.exe 設定您的 ClickOnce 應用程式,以便使之能夠接受查詢字串參數。
注意事項: |
---|
請在決定啟用這項功能之前,先參閱本主題之後的「安全性」一節。 |
下一個程序會示範您的 ClickOnce 應用程式如何能使用一小段程式碼,在應用程式首次啟動時讀取這些值。
如需如何使用 Mage.exe 或 MageUI.exe 建立 ClickOnce 部署的資訊,請參閱逐步解說:手動部署 ClickOnce 應用程式。
注意事項: |
---|
您無法將命令列引數傳遞到 ClickOnce 應用程式;如果您想要對應用程式提供引數,必須透過 Web 部署該應用程式,並在 URL 中提供查詢字串參數。 |
若要以 MageUI.exe 啟用 ClickOnce 應用程式中的查詢字串傳遞
開啟 .NET 命令提示字元並輸入:
MageUI
從 [檔案] 功能表,選取 [開啟],並開啟您的 ClickOnce 應用程式的部署資訊清單,也就是以 .application 副檔名為結尾的檔案。
選取左手邊巡覽視窗中的 [部署選項] 面板,並選取標記為 [允許傳遞 URL 參數至應用程式] 的核取方塊。
從 [檔案] 功能表選取 [儲存]。
若要從 ClickOnce 應用程式取得查詢字串資訊
將下列程式碼放置在專案中的任何位置:
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 (依名稱索引排列)。
穩固程式設計
當您使用查詢字串參數時,請務必仔細考量要如何安裝及啟動應用程式。如果您的應用程式設定為從 Web 或從網路共用資料夾安裝到使用者的電腦上,則使用者很可能只會透過 URL 啟動應用程式一次。在那之後,使用者通常會使用 [開始] 功能表內的捷徑啟動您的應用程式。因此,您的應用程式一定只會在其存留期 (Lifetime) 期間收到查詢字串引數一次。如果您選擇要將這些引數儲存到使用者的電腦上供未來使用,您必須負責使用安全的方法將這些引數儲存在安全的地方。
如果您的應用程式只能在線上使用,則永遠會透過 URL 啟動。不過,即使在這種情形下,您的應用程式也必須撰寫為能夠在查詢字串參數遺失或損毀時正常運作。
安全性
只有當您打算先清除任何惡意字元的輸入後再使用該輸入時,才允許將 URL 參數傳遞給您的 ClickOnce 應用程式。例如,如果將包含內嵌引號、斜線或分號的字串,未經篩選就用於針對資料庫發出的 SQL 查詢中,該字串可能會執行任意的資料作業。如需查詢字串安全性的詳細資訊,請參閱指令碼攻擊概觀。