1

如何解析发送到 .NET 中应用程序清单的查询字符串(GET / POST 参数)?
从一个应用程序中,我调用MyApp.application它需要安装我的 .NET 应用程序(如果未安装),并且在任何情况下它都应该调用应该解析 GET 参数的应用程序。

稍后编辑:
我有一个 .NET 应用程序,应该通过 ClickOnce 安装。它已经发布在网络服务器上。应用程序的执行是通过MyApp.application从外部应用程序(用 PHP 编写)调用文件来完成的。这通常会检查更新并在需要时安装应用程序,然后它会调用应用程序,因此这是始终从外部应用程序调用的文件。
外部应用程序通过 GET 查询向该文件发送参数,该文件应在 .NET 应用程序中处理(参数包括凭据信息,因为这是实现自动登录的最简单方法)。
如果将 GET 参数发送到MyApp.application,我如何在MyApp.cs每次启动时处理它们?

4

1 回答 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 回答