Подтвердить что ты не робот

Есть ли готовый метод .NET для обработки тела ответа объекта HttpListener HttpListenerRequest?

Я использую HttpListener для предоставления веб-сервера для приложения, написанного на другой технологии на localhost. Приложение использует простую форму представления (application/x-www-form-urlencoded), чтобы выполнить свои запросы к моему программному обеспечению. Я хочу знать, есть ли уже написанный синтаксический анализатор для преобразования тела документа запроса html в хеш-таблицу или эквивалент.

Мне трудно поверить, что мне нужно написать это самостоятельно, учитывая, что, как представляется,.NET уже предоставляет.

Спасибо заранее,

4b9b3361

Ответ 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, чтобы ParseQueryStringSystem.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();