是否有一个.NET ready方法来处理HttpListener HttpListenerRequest主体的响应主体?

时间:2009-11-20 00:17:10

标签: c# .net http

我正在使用HttpListener为在localhost上使用其他技术编写的应用程序提供Web服务器。该应用程序使用简单的表单提交(application / x-www-form-urlencoded)向我的软件发出请求。我想知道是否已经编写了一个解析器来将html请求文档的主体转换为哈希表或等效文件。

我发现很难相信我需要自己写这个,因为.NET已经提供了多少。

提前致谢,

3 个答案:

答案 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();