我需要调用的 Web 服务的 URL 包含一个包含自由格式文本的参数。我不知道为什么它是这样设计的,因为它是使用 POST 发送的,并且包含许多字段作为 POST 的一部分。但是,这给我带来了一个问题。
对于井号和 等某些字符,URL 在遇到问题字符时会被截断。我正在对参数的文本进行 HTML 编码,但问题仍然存在。
我可以看到像 > 这样的特殊字符被编码为像 gt; 这样的东西。我认为编码字符串中的分号在某种程度上是一个问题。
我在服务器上放置了一个嗅探器来接收传入请求,我发现 URL 已被截断。
在服务器上我看到类似的内容:
...?extraData=kjfkfjslkj
代替:
...?extraData=kjfkfjslkj#kfjkdlsfj
代码是这样的:
using System.Web;
....
String strExtra="kjfkfjslkj#kfjkdlsfj";
strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra);
HttpWebRequest oRequest = (HttpWebRequest)WebRequest.Create(new Uri(strURL));
oRequest.Method = httpMethod;
oRequest.ContentType = "application/atom+xml";
...
using (WebResponse oResponse = oRequest.GetResponse())
{
...
}
哈希之后的所有内容 (#
) 标志未发送到服务器。浏览器和页面上的脚本使用它来表示页面上的位置或其他含义。删除哈希符号或对其进行 url 编码 (%23
)将其发送到服务器。
这行:
strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra);
应该
strURL = strStuff + "?extraData=" + Server.UrlEncode(strExtra);
当使用 url 中的数据时,html 编码是没有用的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)