使用 HttpListener 访问键/值对

Posted

技术标签:

【中文标题】使用 HttpListener 访问键/值对【英文标题】:Accessing Key/Value pairs using HttpListener 【发布时间】:2014-09-14 00:23:24 【问题描述】:

编辑:请注意,这是一个 WinForms 应用程序,而不是网络应用程序。

我正在使用WebClient.UploadValues(Uri, "POST", NameValueCollection) 将值发送到HttpListener 的实例。在侦听器方面,当HttpListener.GetContext() 方法返回时,我可以将发送的数据作为byte [] 访问。

我可以使用 EncodingXXX.GetString(buffer) 将这些数据转换为文本,它会返回以下内容:

Key1=Value1 Key2=Value2 ...

字符串中的每个项目都由 & 符号 & 分隔。键和值都使用HttpUtility.htmlEncode/HttpUtility.HtmlDecode 进行编码,因此我可以根据与号分割数据。等号 = 符号,但是如果键或值包含它,则不会被编码。

数据中的等号是意料之中的,由于 HtmlEncode 不处理它,是否有其他标准实用程序类可以提供帮助?如果可能,我想避免手动替换字符串,因为它容易出错。

【问题讨论】:

The equal = sign, however does not get encoded if the key or value contains it 这意味着您的客户端发送了无效数据。它应该已经逃脱了。忽略请求即可。 @EZI:客户端和服务器都是我写的。这就是问题所在。如果 HtmlEncode 没有转义等号,我怎样才能正确编码它而不求助于容易出错的自定义字符串替换? @MatthewHaugen:你链接到的另一个问题也是我自己的。使用的例子相同,但问题完全不同。 @RaheelKhan 好的,很公平。但我相信我对另一个人的回答也应该回答这个问题。 【参考方案1】:

事实证明HttpUtility.UrlEncode / HttpUtility.UrlDecode 更适合这种数据。

【讨论】:

以上是关于使用 HttpListener 访问键/值对的主要内容,如果未能解决你的问题,请参考以下文章

Httplistener 中的“指定的网络名称不再可用”

HttpListener 的 CORS 访问

HttpListener“访问被拒绝”,尝试将 url 添加到 ACL

Laravel 查询构建器:如何访问 JSON 键/值对

访问对象键:函数中的值对

我正在使用 C# 将 XML 文件转换为 CSV。我尝试了不同的方法,但无法弄清楚如何访问键名/值对