Есть ли готовый метод .NET для обработки тела ответа объекта HttpListener HttpListenerRequest?
Я использую HttpListener для предоставления веб-сервера для приложения, написанного на другой технологии на localhost. Приложение использует простую форму представления (application/x-www-form-urlencoded), чтобы выполнить свои запросы к моему программному обеспечению. Я хочу знать, есть ли уже написанный синтаксический анализатор для преобразования тела документа запроса html в хеш-таблицу или эквивалент.
Мне трудно поверить, что мне нужно написать это самостоятельно, учитывая, что, как представляется,.NET уже предоставляет.
Спасибо заранее,
Ответы
Ответ 1
Вы имеете в виду нечто вроде HttpUtility.ParseQueryString, которое дает вам имяValueCollection? Вот пример кода. Вам нужно больше проверки ошибок и, возможно, использовать тип содержимого запроса для определения кодировки:
string input = null;
using (StreamReader reader = new StreamReader (listenerRequest.InputStream)) {
input = reader.ReadToEnd ();
}
NameValueCollection coll = HttpUtility.ParseQueryString (input);
Если вы используете HTTP GET вместо POST:
string input = listenerRequest.Url.QueryString;
NameValueCollection coll = HttpUtility.ParseQueryString (input);
Ответ 2
Магические биты, которые заполняют HttpRequest.Form, находятся в System.Web.HttpRequest, но они не являются общедоступными (Reflector метод "FillInFormCollection" в этом классе, чтобы видеть). Вы должны интегрировать свой конвейер с HttpRuntime (в основном писать простой узел ASP.NET), чтобы воспользоваться всеми преимуществами.
Ответ 3
Если вы хотите избежать зависимости от System.Web, который должен использовать HttpUtility.ParseQueryString, вы можете использовать Uri
метод расширения ParseQueryString
найден в System.Net.Http
.
Обязательно добавьте ссылку (если она еще не указана) в System.Net.Http
в вашем проекте.
Обратите внимание, что вам нужно преобразовать тело ответа в действительный Uri
, чтобы ParseQueryString
(в System.Net.Http
) работал.
string body = "value1=randomvalue1&value2=randomValue2";
// "http://localhost/query?" is added to the string "body" in order to create a valid Uri.
string urlBody = "http://localhost/query?" + body;
NameValueCollection coll = new Uri(urlBody).ParseQueryString();