Вопрос
Как я могу проанализировать строку запроса (параметры 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();
}