2017-08-15 225 views
0

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

我尝试了在线建议的解决方案,但仍然没有运气。 任何人都可以建议如何解决这个问题?

  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(); 
       } 
+0

'我遇到这个错误'在哪一行? – mjwills

+0

关于此行:使用(var response =(HttpWebResponse)request.GetResponse()) – Ann

+0

这是我遇到的确切错误,如果我尝试删除request.ContentLength行:[+ \t \t $ exception \t {“要写入的字节到该流超过指定的Content-Length字节大小。“} \t System.Exception {System.Net.ProtocolViolationException} ] – Ann

回答

0

每当你看到包括three-digit HTTP status code一个错误,这意味着你能在网络上发送的请求,并能得到回应。状态代码实际上是由服务器提供的,而不是由.NET运行时引发的或任何您所在的位置。 (在某些情况下,状态码实际上可能来自您与服务器之间的设备,例如负载平衡器或网关,但通常不是问题。)

要理解此类错误,您必须了解服务器。在这种情况下,即使您提供了HTTP协议所需的所有标头,您也可能会忽略服务器认为必需的标头。它可能是服务器不喜欢正文的内容。这可能是服务器有一个错误。可能是真的......在服务器上。

基于c#客户端代码,我们无法解决这个问题。您需要联系运行该服务的人员并要求他们协助。他们可能能够检查他们身边的日志,以确定他们的服务器为什么发布400状态码。或者要求他们提供一个“已知好的”请求消息示例(包括头文件);把它和你自己的信息进行比较,寻找可能导致问题的任何差异。