Question

Comment puis-je analyser la chaîne de requête (paramètres GET / POST) envoyée au manifeste d'une application en .NET?
À partir d’une application, j’appelle MyApp.application , qui doit installer mon application .NET (si elle n’est pas installée). Dans tous les cas, il doit appeler l’application qui doit analyser les paramètres GET.

Éditer plus tard:
J'ai une application .NET qui devrait être installée via ClickOnce. Il est déjà publié sur un serveur Web. L'exécution de l'application se fait en appelant le fichier MyApp.application à partir d'une application externe (écrite en PHP). Cela vérifie normalement les mises à jour et installe si nécessaire l'application, puis appelle l'application. Il s'agit donc du fichier qui sera toujours appelé à partir de l'application externe.
L'application externe envoie des paramètres via une requête GET à ce fichier, qui doit être traité dans l'application .NET (les paramètres incluent des informations d'identification, car c'est le moyen le plus simple pour implémenter la connexion automatique).
Si les paramètres GET sont envoyés à MyApp.application , comment puis-je les traiter dans MyApp.cs chaque fois qu'il est lancé?

Était-ce utile?

La solution

Tout d'abord, vous devez vous assurer que les options de chaîne de requête sont activées (propriétés du projet = > publier => options = > manifestes = > autoriser les paramètres d'URL ...);

Ensuite, pour permettre la parité entre le mode autonome et le Web, j'utilise quelque chose comme ci-dessous (le point important est ActivationArguments.ActivationData ; vous aurez besoin d'une référence à System.Deployment.dll aussi).

Vous pouvez également consulter System.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri , MSDN ayant un bon exemple de ici .

    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();
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top