Я искал SO и нашел похожие вопросы, но ни один из них не сравнивал всех трех. Это меня удивило, поэтому, если кто-то знает об одном, пожалуйста, укажите мне его.
Существует несколько различных способов анализа строки запроса запроса. "Правильный" способ (IMO) должен обрабатывать нулевые/отсутствующие значения, а также, при необходимости, декодировать значения параметров. Какое из следующего было бы лучшим способом сделать оба?
Метод 1
string suffix = Request.QueryString.Get("suffix") ?? "DefaultSuffix";
Method2
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";
Вопросы:
-
Будет ли
Request.QueryString["suffix"]
возвращать значение null, если суффикс не указан? (Смущающе основной вопрос, я знаю) -
Предоставляет ли
HttpUtility.ParseQueryString()
дополнительную функциональность для прямого доступа кRequest.QueryString
? -
В документации MSDN указано это предупреждение:
The ParseQueryString method uses query strings that might contain user input, which is a potential security threat. By default, ASP.NET Web pages validate that user input does not include script or HTML elements. For more information, see Script Exploits Overview.
Но мне непонятно, если это означает, чтоParseQueryString()
следует использовать для обработки этого или из-за него обнаруживаются недостатки безопасности... Что это? -
ParseQueryString()
по умолчанию использует кодировку UTF8... все браузеры по умолчанию кодируют строку запроса в UTF8? -
ParseQueryString()
будет разделять запятые значения, если указано больше одного... делает этоRequest.QueryString()
, или что произойдет, если это не так? -
Какой из этих методов будет правильно декодировать "%2B" как "+"?
Показывая мои корни разработки Windows еще раз... и я был бы гораздо более быстрым разработчиком, если бы я не задумывался об этих вещах так много...: P