Pregunta

¿Cómo puedo analizar la cadena de consulta (parámetros GET / POST) enviada al manifiesto de una aplicación en .NET?
Desde una aplicación, estoy llamando a MyApp.application que necesita instalar mi aplicación .NET (si no está instalada) y, en cualquier caso, debería llamar a la aplicación que debería analizar los parámetros GET.

Edición posterior:
Tengo una aplicación .NET que debería instalarse mediante ClickOnce. Ya está publicado en un servidor web. La ejecución de la aplicación se realiza llamando al archivo MyApp.application desde una aplicación externa (escrita en PHP). Normalmente, esto busca actualizaciones e instala la aplicación si es necesario, luego llama a la aplicación, por lo que este es el archivo al que siempre se llamará desde la aplicación externa.
La aplicación externa envía los parámetros a través de una consulta GET a este archivo, que debe procesarse en la aplicación .NET (los parámetros incluyen información de credenciales, ya que esta es la forma más fácil que puedo ver para implementar el inicio de sesión automático). Si los parámetros GET se envían a MyApp.application , ¿cómo puedo procesarlos en MyApp.cs cada vez que se inicie?

¿Fue útil?

Solución

Primero, debe asegurarse de que las opciones de cadena de consulta estén habilitadas (propiedades del proyecto = > Publique = > opciones = > manifiestos = > permitir parámetros de URL ...);

Luego: para permitir la paridad entre la versión independiente y la web, uso algo como lo siguiente (el bit importante es ActivationArguments.ActivationData ; necesitará una referencia a System.Deployment.dll también).

También puede consultar System.Deployment.Application.ApplicationDeployment.CurrentDeployment.ActivationUri , que MSDN tiene un buen ejemplo para aquí .


    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();
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top