c#wup使用urlencoded内容发布请求

时间:2018-01-12 09:48:14

标签: c# post uwp urlencode

我尝试用Postdata执行一个Post Request,它是部分urlencoded。 我有以下PostData要发送:

p1=v1
p2=v2
p3=up1=uv1&up2=uv2

为了实现这一点,我格式化了p3的值

p3=up1%3duv1%26up2%3duv2

然后我用一个String值写出所有内容:

p1=v1&p2=v2&p3=up1%3duv1%26up2%3duv2

现在我有一个帖子请求:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "POST";
byte[] data  = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.Headers["ContentLength"] = data.Length.ToString();
using (Stream stream = await request.GetRequestStreamAsync())
{
    stream.Write(data, 0, data.Length);  
}
WebResponse response = await request.GetResponseAsync();
Stream streamResponse = response.GetResponseStream();

但目标网址现在收到了

p1=v1
p2=v2
P3=up1=uv1_up2=uv2

a _ instaed of& 另外,然而我正在使用UTF8编码像äüö这样的Charakters已经坏了。

我尝试了几种编码(ASCII,iso-8859-1)但总是一样。

最后一个问题是,如何发布urlencoded String?

1 个答案:

答案 0 :(得分:1)

  

最后一个问题是,如何发布urlencoded String?

我无法重现您的问题。使用上面的客户端代码片段,我可以在服务器端收到包含&的正确帖子数据。我创建了一个Web API,其目标是.Net Framework 4.7用于测试,Post()方法代码如下:

public async Task<object> Post()
{
    var kvs = await Request.Content.ReadAsFormDataAsync();
    return kvs.AllKeys.Select(k => new { key = k, value = kvs[k] });
}

使用您的客户端代码段,我可以收到正确的返回值,如下图所示。我的UWP应用程序目标构建为16299. enter image description here

因此,发布包含&的字符串的方式应该是正确的。您的问题可能是由您的服务器端引起的,如果您仍有问题,请提供服务器端详细信息。 Here是一个类似的线程,您也可以参考。