Вопрос

Как я могу проанализировать строку запроса (параметры GET / POST), отправленную в манифест приложения в .NET?
Из одного приложения я звоню MyApp.application которому необходимо установить мое .NET-приложение (если оно не установлено), и в любом случае оно должно вызвать приложение, которое должно проанализировать параметры GET.

Последующее редактирование:
У меня есть .NET-приложение, которое должно быть установлено через ClickOnce.Он уже опубликован на веб-сервере.Выполнение приложения осуществляется путем вызова MyApp.application файл из внешнего приложения (написан на PHP).Обычно это проверяет наличие обновлений и устанавливает приложение, если требуется, затем вызывает приложение, так что это файл, который всегда будет вызываться из внешнего приложения.
Внешнее приложение отправляет параметры через запрос GET в этот файл, который должен быть обработан в .NET app (параметры включают информацию о учетных данных, потому что это самый простой способ, который я вижу для реализации автоматического входа в систему).
Если параметры GET будут отправлены в MyApp.application, как я могу обработать их в MyApp.cs каждый раз, когда он запускается?

Это было полезно?

Решение

Во-первых, вам нужно убедиться, что параметры строки запроса включены (свойства проекта=> публикация=> параметры => манифесты=> разрешить параметры URL ...);

Затем, чтобы обеспечить четность между standalone и web, я использую что-то вроде приведенного ниже (важным моментом является 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();
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top