Request.QueryString [] против Request.Query.Get () против HttpUtility.ParseQueryString ()

Я искал SO и нашел похожие вопросы, но никто не сравнил все три. Это меня удивило, поэтому, если кто-то знает об этом, укажите мне, пожалуйста, на него.

Существует несколько различных способов синтаксического анализа строки запроса ... "правильный" способ (IMO) должен обрабатывать нулевые / отсутствующие значения, а также при необходимости декодировать значения параметров. Что из следующего было бы наилучшим способом сделать и то, и другое?


Метод 1

string suffix = Request.QueryString.Get("suffix") ?? "DefaultSuffix";


Метод2

string suffix = Request.QueryString["suffix"] ?? "DefaultSuffix";


Метод 3

NameValueCollection params = HttpUtility.ParseQueryString(Request.RawUrl);    
string suffix = params.Get("suffix") ?? "DefaultSuffix";


Метод 4

NameValueCollection params = HttpUtility.ParseQueryString(Request.RawUrl);    
string suffix = params["suffix"] ?? "DefaultSuffix";


Вопросы:

  1. Будет ли Request.QueryString ["суффикс "] вернуть нуль, если суффикс не был указан? (Смущающе простой вопрос, я знаю)

  2. Предоставляет ли HttpUtility.ParseQueryString () какие-либо дополнительные функции вместо прямого доступа к Request.QueryString ?

  3. В документации MSDN указано это предупреждение:

    Метод ParseQueryString использует строки запроса, которые могут содержать вводимые пользователем данные, что представляет собой потенциальную угрозу безопасности. По умолчанию веб-страницы ASP.NET проверяют, что вводимые пользователем данные не включают скрипты или элементы HTML. Для получения дополнительной информации см. Обзор использования сценариев.

    Но мне непонятно, означает ли это, что ParseQueryString () должен использоваться для обработки этого, или из-за этого он подвергается уязвимостям безопасности ... Что это такое?

  4. ParseQueryString () по умолчанию использует кодировку UTF8 ...все ли браузеры кодируют строку запроса в UTF8 по умолчанию?

  5. ParseQueryString () будет разделять запятыми значения, если указано более одного ... делает ли Request.QueryString () это как ну, или что произойдет, если этого не произойдет?

  6. Какой из этих методов правильно расшифрует «% 2b» как «+»?


Снова показать мои корни разработки Windows ... более быстрый разработчик, если бы я не задумывался об этих вещах так сильно ...: P

12
задан James King 23 January 2012 в 07:09
поделиться