用于HttpWebRequest的Url被特殊字符截断

Geo*_*rge 2 c# urlencode httpwebrequest

我需要调用的Web服务的URL包括一个包含自由格式文本的参数.我不确定为什么它是这样设计的,因为它是使用POST发送的,并且包含许多字段作为POST的一部分.但是,它给我带来了一个问题.

对于某些字符(如井号和<>),URL会在遇到问题字符时被截断.我是HTML编码参数的文本,但问题仍然存在.我可以看到像>这样的特殊字符被编码为gt;.我认为编码字符串中的分号在某种程度上是个问题.

我把一个嗅探器接收到服务器上的传入请求,我发现URL已被截断.

在服务器上我看到类似的东西:

    ...?extraData=kjfkfjslkj
Run Code Online (Sandbox Code Playgroud)

代替:

    ...?extraData=kjfkfjslkj#kfjkdlsfj
Run Code Online (Sandbox Code Playgroud)

代码是这样的:

    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())
    {
    ...
    }
Run Code Online (Sandbox Code Playgroud)

Kyl*_*man 7

hash(#)符号后面的所有内容都不会发送到服务器.页面上的浏览器和脚本使用它来表示页面上的位置或其他一些重要性.删除哈希符号或url编码it(%23)以将其发送到服务器.

这一行:

strURL = strStuff + "?extraData=" + System.Web.HttpUtility.HtmlEncode(strExtra);
Run Code Online (Sandbox Code Playgroud)

应该

strURL = strStuff + "?extraData=" + Server.UrlEncode(strExtra);
Run Code Online (Sandbox Code Playgroud)

在url中使用数据时,html的编码是无用的.