使用 PostAsync 发送数据时服务器 returns 400 错误
Server returns 400 error when I send data using PostAsync
我正在使用以下方法 post 到 Web 服务。当我使用它时,我经常收到 400 错误。如果我使用通过 Posty 传入的相同数据,则服务 returns 预期数据
public static async Task<T> SendData<T>(string apiToUse, params string[] data)
{
var url = string.Format("{0}/{1}", Constants.BaseTestUrl, apiToUse);
dynamic t;
var kvp = new Dictionary<string, string>();
for (var i = 0; i < data.Length; i += 2)
{
kvp.Add(data[i], data[i + 1]);
}
var dta = new FormUrlEncodedContent(kvp);
dta.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
using (var client = new HttpClient())
{
var result = client.PostAsync(url, dta).Result;
//result.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
var rv = result.Content.ReadAsStringAsync().Result;
t = JsonConvert.DeserializeObject<T>(rv);
}
return t;
}
在我的测试示例中,我将两个键和两个值传递给参数字符串[]数据。
我能看到的唯一不同的是,在 posty 上,我在单击发送之前定义了 Content-Type(我也在此处完成)。
这让我有些发疯,所以任何指点将不胜感激。
如果不确切知道请求应该是什么样子,就很难提供完整的答案。您能否尝试/调整代码如下:
var kvp = string.Empty;
for (var i = 0; i < data.Length; i += 2)
{
kvp += string.Format("{0}={1}; ", data[i], data[i+1]);
}
// remove last ';' character
kvp = kvp.TrimEnd(new char[] { ' ', ';' });
var dta = new MultipartFormDataContent();
dta.Add(new StringContent(kvp));
更改在于使用 MultipartFormDataContent
以符合请求格式。显然,这段代码只是为了测试。在将其投入生产之前,应完成额外的验证和内容创建 (kvp
)。
我正在使用以下方法 post 到 Web 服务。当我使用它时,我经常收到 400 错误。如果我使用通过 Posty 传入的相同数据,则服务 returns 预期数据
public static async Task<T> SendData<T>(string apiToUse, params string[] data)
{
var url = string.Format("{0}/{1}", Constants.BaseTestUrl, apiToUse);
dynamic t;
var kvp = new Dictionary<string, string>();
for (var i = 0; i < data.Length; i += 2)
{
kvp.Add(data[i], data[i + 1]);
}
var dta = new FormUrlEncodedContent(kvp);
dta.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
using (var client = new HttpClient())
{
var result = client.PostAsync(url, dta).Result;
//result.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data");
var rv = result.Content.ReadAsStringAsync().Result;
t = JsonConvert.DeserializeObject<T>(rv);
}
return t;
}
在我的测试示例中,我将两个键和两个值传递给参数字符串[]数据。
我能看到的唯一不同的是,在 posty 上,我在单击发送之前定义了 Content-Type(我也在此处完成)。
这让我有些发疯,所以任何指点将不胜感激。
如果不确切知道请求应该是什么样子,就很难提供完整的答案。您能否尝试/调整代码如下:
var kvp = string.Empty;
for (var i = 0; i < data.Length; i += 2)
{
kvp += string.Format("{0}={1}; ", data[i], data[i+1]);
}
// remove last ';' character
kvp = kvp.TrimEnd(new char[] { ' ', ';' });
var dta = new MultipartFormDataContent();
dta.Add(new StringContent(kvp));
更改在于使用 MultipartFormDataContent
以符合请求格式。显然,这段代码只是为了测试。在将其投入生产之前,应完成额外的验证和内容创建 (kvp
)。