如何:在 ClickOnce 应用程序中检索查询字符串信息
更新:2007 年 11 月
“查询字符串”是以问号 (?) 开头的 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 只激活一次应用程序。此后,用户通常会使用“开始”菜单中的快捷方式来激活应用程序。因此,能保证您的应用程序在其生存期中只接收查询字符串参数一次。如果选择将这些参数存储在用户的计算机上以备将来之用,则由您负责以一种安全的方式来存储它们。
如果您的应用程序只能联机使用,则其将总是通过 URL 激活。但是,即使在这种情况下,您的应用程序也必须编写为在缺少查询字符串参数或查询字符串参数损坏的情况下能够正常运行。
安全性
只有当计划在使用 ClickOnce 应用程序之前先清除输入的所有恶意字符时,才允许向该程序传递 URL 参数。例如,如果在对数据库的 SQL 查询中使用了未经筛选的字符串,则其中嵌入了引号、斜杠或分号的字符串可能会执行任意数据操作。有关查询字符串安全性的更多信息,请参见脚本侵入概述。