オンライン ClickOnce アプリケーションでクエリ文字列の情報を取得する

クエリ文字列 とは、URL のうちの疑問符 (?) で始まる部分であり、 name=valueの形式で任意の情報を記述します。 たとえば、servername でホストされている WindowsApp1 という ClickOnce アプリケーションがあり、このアプリケーションを起動するときに、username という変数に値を渡すとします。 URL は次のようになります。

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

以下の 2 つの手順では、ClickOnce アプリケーションを使用してクエリ文字列の内容を取得する方法を説明します。

Note

クエリ文字列で情報を渡すことができるのは、ファイル共有やローカル ファイル システムではなく HTTP を使用してアプリケーションが起動しているときだけです。

まず、ClickOnce アプリケーションで短いコードを使用して、アプリケーションの起動時にクエリ文字列の値を読み取る方法について説明します。

次に、MageUI.exe を使用して、クエリ文字列パラメーターを受け入れることができるように ClickOnce アプリケーションを構成する方法について説明します。 これは、アプリケーションを発行するたびに実行する必要があります。

Note

この機能を有効にする前に、この後の「セキュリティ」を参照してください。

Mage.exe または MageUI.exe を使用して ClickOnce 配置を作成する方法については、「チュートリアル: ClickOnce アプリケーションを手動で配置する」を参照してください。

Note

.NET Framework 3.5 SP1 以降では、オフラインの ClickOnce アプリケーションにコマンド ライン引数を渡すことができます。 このアプリケーションに引数を提供する場合は、.APPREF-MS 拡張子を持つショートカット ファイルにパラメーターを渡すことができます。

ClickOnce アプリケーションでクエリ文字列を取得するには

  1. プロジェクト内に次のコードを記述します。 このコードが機能するためには、System.Web への参照を設定し、System.Web、System.Collections.Specialized、および System.Deployment.Application に対して using ディレクティブまたは Imports ディレクティブを追加する必要があります。

    Note

    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 Framework のコマンド プロンプトを開き、次のように入力します。

    MageUI
    
  2. [ファイル] メニューの [開く] を選び、対象の ClickOnce アプリケーションの配置マニフェストを開きます。配置マニフェスト ファイルの拡張子は .application です。

  3. 左側のナビゲーション ウィンドウにある [配置オプション] パネルをクリックし、 [URL パラメーターをアプリケーションに渡すことを許可する] チェック ボックスをオンにします。

  4. [ファイル] メニューの [保存]をクリックします。

Note

または、Visual Studio でクエリ文字列を渡すことができるようにすることもできます。 [URL パラメーターをアプリケーションに渡すことを許可する] チェック ボックスをオンにします。このチェック ボックスは、 [プロジェクトのプロパティ]を開いて [発行] タブをクリックし、 [オプション] ボタンをクリックして [マニフェスト]を選択すると表示されます。

Note

.NET Core 3.1 および .NET 5 以降の ClickOnce では、発行ウィザードやプロジェクト デザイナーの [発行] ページではなく、発行ツールを使用して配置プロパティを設定します。 詳細については、ClickOnce を使用した .NET Windows アプリケーションの配置.NET 用 ClickOnce に関するページを参照してください。

信頼性の高いプログラミング

クエリ文字列パラメーターを使用する場合は、アプリケーションがどのようにインストールされ、アクティブ化されるかを十分に考慮する必要があります。 アプリケーションが、Web またはネットワーク共有からユーザーのコンピューターにインストールされるように構成されている場合は、ユーザーが一度だけ URL を通じてアプリケーションをアクティブにすることが予想されます。 その後ユーザーは、ほとんどの場合、 [スタート] メニューのショートカットを使用してアプリケーションをアクティブにします。 その結果、アプリケーションはその有効期間中に一度だけクエリ文字列引数を受け取ることが保証されます。 これらの引数を後から使用できるようにユーザーのコンピューターに格納する場合は、それらが安全かつ確実に格納されるようにする必要があります。

アプリケーションがオンラインでのみ使用される場合は、常に URL を通じてそのアプリケーションがアクティブ化されます。 ただしその場合でも、クエリ文字列パラメーターが失われたり壊れたりしても正しく機能するようにアプリケーションを作成する必要があります。

.NET Framework のセキュリティ

悪意のある文字の入力を使用前に削除する予定である場合にのみ、ClickOnce アプリケーションに URL パラメーターを渡すことができるようにしてください。 たとえば、引用符、スラッシュ、またはセミコロンが埋め込まれた文字列を、フィルターしないままデータベースに対する SQL クエリに使用すると、任意のデータ操作が行われる可能性があります。 クエリ文字列のセキュリティの詳細については、「Script Exploits Overview」を参照してください。