【问题标题】:use of application/x-www-form-urlencoded in POST method, HttpClient在 POST 方法中使用 application/x-www-form-urlencoded,HttpClient
【发布时间】:2015-02-19 08:41:00
【问题描述】:

如果我要发送这些数据怎么办:发布参数:

access_token access_token_Value

list Array of array(4 对 arg)

arg1 arg1_value

arg2 arg2_value

arg3 arg3_value

arg4 arg4_value

在规范中是这样的(POST 参数和返回数组中所有可能的枚举值都在本文档中指定,并用竖线 || 分隔)。我有通用 Windows 应用程序项目。如何将此数据转换为“application/x-www-form-urlencoded”格式?对于我使用的键值对之类的普通对

    var body = new List<KeyValuePair<string, string>>
    {
        new KeyValuePair<string, string>("arg1", "arg1value"),
        new KeyValuePair<string, string>("arg2", "arg2value"),
        new KeyValuePair<string, string>("arg3", "arg3value"),
        new KeyValuePair<string, string>("arg4", "arg4value")
    };

    var content = new FormUrlEncodedContent(body);
    var result = httpClient.PostAsync(uri, content).Result;

这样也可以(传输数据:arg1=arg1value&arg2=arg2value&....),但是如果数据和我在本文开头写的一样呢?

【问题讨论】:

    标签: c# windows-phone-8 win-universal-app dotnet-httpclient


    【解决方案1】:

    假设您的键不需要编码(即不包含任何在 URI 中特殊的字符),其中字段在名称-值对集合中,其值已转换为字符串):

    var httpBody = String.Join('&', 
                      fields.Select(nv => 
                         String.Concat(nv.Name,
                                       "=",
                                       WebUtility.UrlEncode(nv.Value))));
    

    然后使用适用的编码序列化到HttpWebRequest 正文中。

    【讨论】:

    • 对不起,我没有指定数据参数。我有电子邮件地址和日期时间(YYYY-MM-DD HH:MM:SS 格式),所以我有“@”和其他特殊字符。带有我的参数的 POST 正文看起来如何? access_token=access_token_Value&list[][arg1]=arg1value&list[][arg2]=value&list[][arg3]=arg3value.... 像这样?或者其他?
    • @ciechan 对UrlEncode 的调用会为您处理所有这些特殊字符。
    • 好的,我明白了。但是带有我的参数的正文会是什么样子?我说的是表单,订单参数。特别是列表(带有我的 4 个键值参数的数组数组)。首先我有:access_token=access_token_Value& 以及以下参数的外观?
    • @ciechan 抱歉,不明白:我只想在调试器或 Fiddler 之类的工具中查看结果。
    • 什么是“String.Convaternate”?是不是像“String.Concat”?
    猜你喜欢
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2014-03-30
    • 2018-03-24
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多