我正在使用HttpListener为在localhost上使用其他技术编写的应用程序提供Web服务器。该应用程序使用简单的表单提交(application / x-www-form-urlencoded)向我的软件发出请求。我想知道是否已经编写了一个解析器来将html请求文档的主体转换为哈希表或等效文件。
我发现很难相信我需要自己写这个,因为.NET已经提供了多少。
提前致谢,
答案 0 :(得分:25)
你的意思是像HttpUtility.ParseQueryString那样给你一个NameValueCollection?这是一些示例代码。您需要更多错误检查,并可能使用请求内容类型来确定编码:
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);
答案 1 :(得分:0)
填充HttpRequest.Form的神奇位在System.Web.HttpRequest中,但它们不是公共的(Reflector方法“FillInFormCollection”在该类上看到)。您必须将您的管道与HttpRuntime集成(基本上编写一个简单的ASP.NET主机)才能充分利用。
答案 2 :(得分:0)
如果您想避免使用HttpUtility.ParseQueryString所需的System.Web依赖,您可以使用Uri
中的ParseQueryString
扩展方法System.Net.Http
。< / p>
请务必在项目的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();