【问题标题】:Server returns 400 error when I send data using PostAsync当我使用 PostAsync 发送数据时服务器返回 400 错误
【发布时间】:2023-03-27 22:03:01
【问题描述】:

我正在使用以下方法发布到 Web 服务。当我使用它时,我经常收到 400 错误。如果我使用通过 Posty 传入的相同数据,服务将返回预期数据

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;
    }

在我的测试示例中,我将两个键和两个值传递给参数 string[] 数据。

我能看到唯一不同的是,在 posty 上,我在点击发送之前定义了 Content-Type(我也在这里完成了)。

这让我有些发疯,所以任何指针都将不胜感激。

【问题讨论】:

  • 您检查目标网址是否正确?我认为 HttpClient 在其构造函数中需要一个基地址,然后在其方法中处理相对地址。
  • 400 中的 HTTP 响应代码表示您的请求有问题。在不知道您要发布到的服务以及它的期望的情况下,我们可以提出的建议并不多。检查您尝试使用的 API 的文档,并确保您的请求格式正确。

标签: c# dotnet-httpclient


【解决方案1】:

如果不确切知道请求的外观,很难提供完整的答案。您可以尝试/调整代码如下:

 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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多