方法 : オンライン ClickOnce アプリケーションでクエリ文字列を取得する
クエリ文字列とは、URL のうちの疑問符 (?) で始まる部分であり、name=value の形式で任意の情報を記述します。たとえば、servername でホストされている WindowsApp1 という ClickOnce アプリケーションがあり、このアプリケーションを起動するときに、username という変数に値を設定するとします。URL は次のようになります。
https://servername/WindowsApp1.application?username=joeuser
以下の 2 つの手順では、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 Framework のコマンド プロンプトを開き、次のように入力します。
MageUI
[ファイル] メニューの [開く] をクリックし、対象の ClickOnce アプリケーションの配置マニフェストを開きます。配置マニフェスト ファイルの拡張子は .application です。
左側のナビゲーション ウィンドウにある [配置オプション] パネルをクリックし、[URL パラメーターをアプリケーションに渡すことを許可する] チェック ボックスをオンにします。
[ファイル] メニューの [Save] をクリックします。
[!メモ]
または、Visual Studio でクエリ文字列を渡すことができるようにすることもできます。[URL パラメーターをアプリケーションに渡すことを許可する] チェック ボックスをオンにします。このチェック ボックスは、[プロジェクトのプロパティ] を開いて [発行] タブをクリックし、[オプション] ボタンをクリックして [マニフェスト] を選択すると表示されます。
信頼性の高いプログラミング
クエリ文字列パラメーターを使用する場合は、アプリケーションがどのようにインストールされ、アクティブ化されるかを十分に考慮する必要があります。アプリケーションが、Web またはネットワーク共有からユーザーのコンピューターにインストールされるように構成されている場合は、ユーザーが一度だけ URL を通じてアプリケーションをアクティブにすることが予想されます。その後ユーザーは、ほとんどの場合、[スタート] メニューのショートカットを使用してアプリケーションをアクティブにします。その結果アプリケーションは、その有効期間中に一度だけクエリ文字列引数を受け取ることが保証されます。これらの引数を後から使用できるようにユーザーのコンピューターに格納する場合は、それらが安全かつ確実に格納されるようにする必要があります。
アプリケーションがオンラインでのみ使用される場合は、常に URL を通じてそのアプリケーションがアクティブ化されます。ただしその場合でも、クエリ文字列パラメーターが失われたり壊れたりしても正しく機能するようにアプリケーションを作成する必要があります。
セキュリティ
事前に悪意のある文字の入力を削除する予定である場合にのみ、ClickOnce アプリケーションに URL パラメーターを渡すことができるようにしてください。たとえば、引用符、スラッシュ、またはセミコロンが埋め込まれた文字列を、フィルターしないままデータベースに対する SQL クエリに使用すると、任意のデータ操作が行われる可能性があります。クエリ文字列のセキュリティの詳細については、「Script Exploits Overview」を参照してください。