如何解析发送到 .NET 中应用程序清单的查询字符串(GET / POST 参数)?
从一个应用程序中,我调用MyApp.application
它需要安装我的 .NET 应用程序(如果未安装),并且在任何情况下它都应该调用应该解析 GET 参数的应用程序。
稍后编辑:
我有一个 .NET 应用程序,应该通过 ClickOnce 安装。它已经发布在网络服务器上。应用程序的执行是通过MyApp.application
从外部应用程序(用 PHP 编写)调用文件来完成的。这通常会检查更新并在需要时安装应用程序,然后它会调用应用程序,因此这是始终从外部应用程序调用的文件。
外部应用程序通过 GET 查询向该文件发送参数,该文件应在 .NET 应用程序中处理(参数包括凭据信息,因为这是实现自动登录的最简单方法)。
如果将 GET 参数发送到MyApp.application
,我如何在MyApp.cs
每次启动时处理它们?
Tom
问问题
352 次
1 回答
2
首先,您需要确保启用查询字符串选项(项目属性=>publish=>options=>manifests=>allow url parameters...);
然后 - 为了允许独立和网络之间的平等,我使用了类似下面的东西(重要的是ActivationArguments.ActivationData
; 你也需要参考System.Deployment.dll
)。
你也可以看看System.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri
,MSDN 有一个很好的例子。
public static string[] GetStartupArguments() {
List<string> allOptions = new List<string>();
try // command line
{
string[] options = System.Environment.GetCommandLineArgs();
if (options != null) { // strip the first (the exe name)
int length = options.Length;
for (int i = 1; i < length; i++)
allOptions.Add(options[i]);
}
} catch { } // lazy swallow
try // query string
{
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) {
string[] options = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData;
if (options != null && options.Length > 0) {
foreach (string queryItem in new Uri(options[0]).Query.TrimStart('?').Split('&')) {
allOptions.Add(System.Web.HttpUtility.UrlDecode(queryItem));
}
}
}
} catch { } // lazy swallow
return allOptions.ToArray();
}
于 2008-11-03T08:57:10.030 回答