C# HttpWebRequest的Url被特殊字符截断

C# HttpWebRequest的Url被特殊字符截断,c#,httpwebrequest,urlencode,C#,Httpwebrequest,Urlencode,我需要调用的Web服务的URL包含一个包含自由格式文本的参数。我不知道为什么它是这样设计的,因为它是使用POST发送的,并且包含许多字段作为POST的一部分。但是,这给我带来了一个问题 对于某些字符,如磅号和,当URL遇到问题字符时,URL将被截断。我正在对参数的文本进行HTML编码,但问题仍然存在。 我可以看到像>这样的特殊字符被编码成类似gt;。我认为编码字符串中的分号在某种程度上是个问题 我在服务器上放置了一个接收传入请求的嗅探器,在那里我看到URL被截断了 在服务器上,我看到如下内容:

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

对于某些字符,如磅号和<>,当URL遇到问题字符时,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编码是无用的。

是。这对我很管用。唯一不同的是我使用了System.Web.HttpUtility.UrlEncode()
Page.Server
属性的类型是
HttpServerUtility
,而
UrlEncode
/
UrlDecode
方法实际上将调用传递到
HttpUtility.UrlEncode
/
HttpUtility.UrlDecode
,所以您很好。