【问题标题】:HTTP 400 Bad Request Error C#HTTP 400 错误请求错误 C#
【发布时间】:2017-08-15 12:41:08
【问题描述】:

我遇到了这个错误:HTTP 400 Bad Request,这可能是什么错误?如何检查 API 的参数是否正确?

我尝试了网上建议的解决方案,但仍然没有运气。 谁能建议如何解决这个问题?

            string url = "/api/customers/reconnect/"; //sample url
            string parameters = new JavaScriptSerializer().Serialize(new { 
                accountNumber = info.accountNumber,
                serviceNumber = info.serviceNumber,
                lastName = info.lastName,
                processType = info.processType,
                reconnectReason = info.reconnectReason,
                priName = info.priName,
                requestDate = info.requestDate,
                Amount = info.amount,
                Email = info.email,
                priName2 = info.priName2,
                withReconnectFee = info.withreconnectFee,
                contactNo2 = info.contactNo2,
                stmtFaxNo = info.stmtFaxNo
            });

            HttpVerb method = HttpVerb.POST;

            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = method.ToString();
            request.ContentLength = 0;
            request.ContentType = ContentType;
            request.Accept = "application/json";


            var encoding = new UTF8Encoding();
            var bytes = encoding.GetBytes(parameters); //Encoding.GetEncoding("iso-8859-1").GetBytes(parameters);
            request.ContentLength = bytes.Length;
            using (var writeStream = request.GetRequestStream())
            {
                writeStream.Write(bytes, 0, bytes.Length);
                writeStream.Close();
            }              

            using (var response = (HttpWebResponse)request.GetResponse())
            {
                var responseValue = string.Empty;

                using (var responseStream = response.GetResponseStream())
                { 
                    if(responseStream != null)
                        using (var reader = new StreamReader(responseStream))
                        {
                            responseValue = reader.ReadToEnd();
                        }
                }

                if (response.StatusCode == HttpStatusCode.OK)
                {
                    var jsonVal = JObject.Parse(responseValue);
                    result = (string)jsonVal["result"].ToString();
                } 

【问题讨论】:

  • I'm encountering this error 在哪一行?
  • 在这一行:使用 (var response = (HttpWebResponse)request.GetResponse())
  • 这是我尝试删除 request.ContentLength 行时遇到的确切错误:[+ $exception {"要写入流的字节超过指定的 Content-Length 字节大小。"} 系统.Exception {System.Net.ProtocolViolationException} ]
  • request.Method = method.ToString(); - 你能交叉检查这是否将Method 设置为“POST”吗?
  • 嗨!是的,这是一个post方法。初始化就在那里 HttpVerb method = HttpVerb.POST;

标签: c#


【解决方案1】:

每当您看到包含three-digit HTTP status code 的错误时,这意味着您能够通过网络发送请求并能够获得响应。状态代码实际上是由服务器提供的,而不是由 .NET 运行时或您身边的任何东西引发的。 (在某些情况下,状态码实际上可能来自您和服务器之间的设备,例如负载均衡器或网关,但这通常不是问题。)

要了解此类错误,您必须了解服务器。在这种情况下,您可能遗漏了服务器认为必须的标头,即使您已提供 HTTP 协议所需的所有标头。可能是服务器不喜欢正文的内容。可能是服务器有错误。可以是任何东西……在服务器上。

我们无法根据 c# 客户端代码解决此问题。您需要联系运行该服务的人员并寻求帮助。他们可能能够检查他们这边的日志,以确定他们的服务器为什么发出 400 状态代码。或者向他们询问“已知良好”的请求消息示例(包括标头);将其与您自己的消息进行比较,找出可能导致问题的任何差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    相关资源
    最近更新 更多