Share via


在線上 ClickOnce 應用程式中擷取查詢字串資訊

「查詢字串」 (query string) 是開頭為句號 (?) 之 URL 的部分,內含 name=value格式的任意資訊。 假設您有裝載於 servername 且名為 WindowsApp1 的 ClickOnce 應用程式,而且想要在啟動應用程式時傳入 username 變數的值。 URL 可能如下所示:

http://servername/WindowsApp1.application?username=joeuser

下列兩個程序示範如何使用 ClickOnce 應用程式來取得查詢字串資訊。

注意

如果正在使用 HTTP 啟動應用程式,而非使用檔案共用或本機檔案系統,則只能在查詢字串中傳遞資訊。

第一個程序示範 ClickOnce 應用程式如何在啟動應用程式時,使用一小部分的程式碼來讀取這些值。

下一個程序示範如何使用 MageUI.exe 設定 ClickOnce 應用程式,以接受查詢字串參數。 只要發行應用程式,就需要執行這項作業。

注意

當您決定啟用這項功能之前,請參閱本主題後面的<安全性>一節。

如需如何使用 Mage.exeMageUI.exe 建立 ClickOnce 部署的相關資訊,請參閱逐步解說:手動部署 ClickOnce 應用程式

注意

從 .NET Framework 3.5 SP1 開始,可以將命令列引數傳遞至離線 ClickOnce 應用程式。 如果您要提供應用程式的引數,則可以將參數傳入副檔名為 .APPREF-MS 的捷徑檔案。

從 ClickOnce 應用程式取得查詢字串資訊

  1. 請在專案中放入下列程式碼。 為了讓這個程式碼運作,您必須參考 System.Web,並為 System.Web、System.Collections.Specialized 和 System.Deployment.Application 新增 usingImports 指示詞。

    注意

    .NET Core 和 .NET 5 和更新版本中不支援 System.Deployment.Application 命名空間中的 ApplicationDeployment 類別和 API。 .NET 7 支援存取應用程式部署屬性的新方法。 如需詳細資訊,請參閱在 .NET 中存取 ClickOnce 部署屬性。 .NET 7 不支援 ApplicationDeployment 方法的同等項。

    private NameValueCollection GetQueryStringParameters()
    {
        NameValueCollection nameValueTable = new NameValueCollection();
    
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
            nameValueTable = HttpUtility.ParseQueryString(queryString);
        }
    
        return (nameValueTable);
    }
    
  2. 呼叫先前定義的函式,以擷取依名稱編製索引之查詢字串參數的 Dictionary

使用 MageUI.exe 將查詢字串傳入 ClickOnce 應用程式

  1. 開啟 .NET 命令提示字元,並輸入:

    MageUI
    
  2. 從 [檔案] 功能表中,選取 [開啟],然後開啟您 ClickOnce 應用程式的部署資訊清單,這是 .application 延伸模組中的檔案結尾。

  3. 選取左導覽視窗中的 [部署選項] 面板,然後選取 [允許傳遞 URL 參數至應用程式] 核取方塊。

  4. 從 [檔案] 功能表中,選取 [儲存]

注意

或者,您可以在 Visual Studio 中啟用查詢字串傳遞。 選取 [允許傳遞 URL 參數至應用程式] 核取方塊,藉由開啟 [專案屬性] 、選取 [發行] 索引標籤、按一下 [選項] 按鈕,然後選取 [資訊清單] 即可找到此核取方塊。

注意

在 ClickOnce for .NET Core 3.1 和 .NET 5 或更新版本中,您可以使用 [發佈] 工具來設定部署屬性,而不是 [發行精靈] 和 [專案設計工具的發佈] 頁面。 如需詳細資訊,請參閱使用 ClickOnce 部署 .NET Windows 應用程式以及 ClickOnce for .NET

穩固程式設計

當您使用查詢字串參數時,必須仔細考慮要如何安裝和啟用應用程式。 如果您的應用程式設定成從 Web 或網路共用安裝在使用者的電腦上,則使用者可能只會透過 URL 啟用應用程式一次。 之後,使用者通常會使用 [開始] 功能表中的捷徑來啟用您的應用程式。 因此,保證您的應用程式只會在其存留期間接收到查詢字串引數一次。 如果您選擇將這些引數儲存在使用者的電腦上供日後使用,則必須負責以安全的方式儲存它們。

如果您的應用程式只能在線上時使用,則一律會透過 URL 予以啟用。 不過,如果查詢字串參數遺失或損毀,則即使在此情況下,您的應用程式還是必須寫入才能正常運作。

.NET Framework 安全性

只有在使用之前想要清理任何惡意字元的輸入時,才允許將 URL 參數傳入 ClickOnce 應用程式。 例如,如果在資料庫的 SQL 查詢中未進行篩選,則內嵌引號、斜線或分號的字串可能會執行任意資料作業。 如需查詢字串安全性的詳細資訊,請參閱 指令碼惡意探索概觀