【问题标题】:c# wup Post Request with urlencoded Content时间:2019-05-10 标签:c#wuppost request with urlencoded Content
【发布时间】:2018-06-21 18:06:36
【问题描述】:

我尝试使用 Postdata 执行 Post 请求,它是部分 urlencoded。 我有以下 PostData 要发送:

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

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

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

然后我将所有内容都写入一个字符串值:

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

一个 _ 代替 & 另外,尽管如此,我正在使用 UTF8 编码 äüö 之类的字符已损坏。

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

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

【问题讨论】:

    标签: c# post uwp urlencode


    【解决方案1】:

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

    我无法重现您的问题。使用上面的客户端代码 sn-p,我可以在服务器端接收包含& 的正确发布数据。我创建了一个针对 .Net Framework 4.7 的 Web API 进行测试,Post() 方法代码如下:

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

    使用您的客户端代码 sn-p 我可以收到正确的返回值,如下图所示。我的 UWP 应用目标 build 16299。

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

    【讨论】:

    • 谢谢,你说得对,后端的开发团队实现了更简洁的功能......我不明白为什么这个问题不会在 Android 上发生,但我可以处理。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2020-10-01
    • 2015-06-14
    相关资源
    最近更新 更多