извлечение сведений строки запроса в интернет-приложении ClickOnce

Строка запроса — это часть URL-адреса, начинающаяся с вопросительного знака (?) и содержащая произвольные сведения в форме имя=значение. Предположим, что у вас есть приложение ClickOnce с именем WindowsApp1 , на котором размещено servername, и вы хотите передать значение переменной username при запуске приложения. URL-адрес может выглядеть следующим образом:

http://servername/WindowsApp1.application?username=joeuser

В следующих двух процедурах показано, как использовать приложение ClickOnce для получения сведений о строке запроса.

Примечание.

Передать сведения в строке запроса можно только при запуске приложения с использованием протокола HTTP вместо общей папки или локальной файловой системы.

Первая процедура показывает, как приложение ClickOnce может использовать небольшой фрагмент кода для чтения этих значений при запуске приложения.

В следующей процедуре показано, как настроить приложение ClickOnce с помощью MageUI.exe, чтобы он смог принять параметры строки запроса. Это потребуется сделать при публикации приложения.

Примечание.

Прежде чем принять решение о включении этой функции, ознакомьтесь с подразделом "Безопасность" ниже.

Сведения о том, как создать развертывание ClickOnce с помощью Mage.exe или MageUI.exe, см. в пошаговом руководстве по развертыванию приложения ClickOnce вручную.

Примечание.

Начиная с платформа .NET Framework 3.5 с пакетом обновления 1 (SP1) можно передать аргументы командной строки в автономное приложение ClickOnce. Если требуется передать аргументы в приложение, можно передать параметры в файл ярлыка с помощью расширения .APPREF-MS.

Получение сведений о строке запроса из приложения ClickOnce

  1. Включите в проект приведенный ниже код. Чтобы этот код функционировал, необходимо иметь ссылку на System.Web и добавлять using или Imports директивы для System.Web, System.Collections.Specialized и System.Deployment.Application.

    Примечание.

    Класс ApplicationDeployment и API в System.Deployment.Application пространстве имен не поддерживаются в .NET Core и .NET 5 и более поздних версиях. В .NET 7 поддерживается новый метод доступа к свойствам развертывания приложения. Дополнительные сведения см. в разделе "Свойства развертывания Access ClickOnce" в .NET. .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

    private NameValueCollection GetQueryStringParameters()
    {
        NameValueCollection nameValueTable = new NameValueCollection();
    
        if (ApplicationDeployment.IsNetworkDeployed)
        {
            string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
            nameValueTable = HttpUtility.ParseQueryString(queryString);
        }
    
        return (nameValueTable);
    }
    
  2. Вызовите определенную ранее функцию, чтобы получить Dictionary параметров строки запроса, индексированных по имени.

Включение передачи строки запроса в приложении ClickOnce с помощью MageUI.exe

  1. Откройте окно командной строки платформы .NET и введите:

    MageUI
    
  2. В меню "Файл" выберите "Открыть" и откройте манифест развертывания для приложения ClickOnce, который является файлом, заканчивающийся расширением.application.

  3. Выберите панель Параметры развертывания в левом окне переходов и установите флажок Разрешать передачу параметров URL-адресов в приложение .

  4. В меню Файл выберите команду Сохранить.

Примечание.

Кроме того, можно включить передачу строки запроса в Visual Studio. Установите флажок Разрешать передачу параметров URL-адресов в приложение , который можно найти, открыв Свойства проекта, выбрав вкладку Публикация , нажав кнопку Параметры , а затем выбрав Манифесты.

Примечание.

В ClickOnce для .NET Core 3.1 и .NET 5 или более поздней версии вы устанавливаете свойства развертывания с помощью средства публикации вместо мастера публикации и страницы публикации конструктора проектов. Дополнительные сведения см. в статье "Развертывание приложения .NET Для Windows с помощью ClickOnce и ClickOnce для .NET".

Отказоустойчивость

При использовании параметров строки запроса необходимо тщательно обдумать процедуру установки и активации приложения. Если приложение настроено для установки на компьютере пользователя из Интернета или из общей сетевой папки, весьма вероятно, что пользователь активирует приложение всего один раз с помощью URL-адреса. После этого пользователь будет активировать приложение уже с помощью ярлыка в меню Пуск . В результате приложение гарантированно получит аргументы строки запроса только один раз за все время своего существования. Если вы решили сохранить эти аргументы на компьютере пользователя для последующего использования, именно вы несете ответственность за их безопасное хранение.

Если приложение работает только в сети, оно всегда будет активироваться через URL-адрес. Но даже в этом случае приложение должно обеспечивать правильную работу в ситуациях, когда параметры строки запроса отсутствуют или повреждены.

безопасность платформы .NET Framework

Разрешить передачу параметров URL-адреса в приложение ClickOnce только в том случае, если вы планируете очистить входные данные любых вредоносных символов перед его использованием. При отсутствии фильтрации SQL-запросов к базе данных строка с внедренными кавычками, символами косой черты или точками с запятой может, например, выполнять произвольные операции с данными. Дополнительные сведения о безопасности строки запроса см. в разделе Общие сведения об использовании сценариев.