строка запроса манифеста .net - PullRequest
1 голос
/ 03 ноября 2008

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

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

1 Ответ

2 голосов
/ 03 ноября 2008

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

Затем - чтобы разрешить паритет между автономным и веб-интерфейсом, я использую что-то вроде ниже (важный бит 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();
    }
...