我不知道你的意思是什么post data needs to be both int and string
, 因为应用程序/x-www-form-urlencoded https://stackoverflow.com/questions/14551194/how-are-parameters-sent-in-an-http-post-request基本上是一个带有字符串键值对的字符串。
所以如果你的原创并不重要id
参数是一个字符串"2"
或一个数字2
.
它将被编码为相同的:name=mynameValue&id=2
所以你的代码没有任何问题。只需使用ToString
方法按原法int
value 来获取其字符串表示形式:
var id = 2;
var dataParams = new FormUrlEncodedContent(
new KeyValuePair<string, string>[]
{
new KeyValuePair<string, string>("name", myname"),
new KeyValuePair<string, string>("id", id.ToString()),
});
您可以使用更少的样板代码对复杂类型进行类似的 urlencode,它甚至看起来更像原始的 python 代码:
public static class HttpUrlEncode
{
public static FormUrlEncodedContent Encode(Object obj)
{
if (obj == null)
throw new ArgumentNullException("obj");
var props = obj
.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.ToDictionary(
prop =>
prop.Name,
prop =>
(prop.GetValue(obj, null) ?? String.Empty).ToString());
return new FormUrlEncodedContent(props);
}
}
var dataParams = HttpUrlEncode.Encode(
new
{
name = "myname",
id = 2
});