发布JSON时ASPC C# - (500)内部服务器错误

时间:2017-11-24 16:06:13

标签: json webrequest

我正在尝试将一些JSON数据发送到远程服务器并从远程服务器读取JSON响应。我的代码跳转到catch异常块,错误ex = {&#34;远程服务器返回错误:(500)内部服务器错误。&#34;}当它到达底部附近的这一行时:< / p>

var httpResponse = (HttpWebResponse)request.GetResponse();

我在这个论坛上看了几篇帖子,并尝试了其他建议的代码,但我不明白/无法让它发挥作用。

请你帮我理解我做错了什么?您可以看到我之前在代码块底部附近注释掉的尝试。

using System;
using System.Text;
using System.Net;
// include
using System.IO;
using System.Web.UI.WebControls;
using HobbsDPDJSONLibrary;
using System.Web;
using Newtonsoft.Json;

namespace DPDAPILibrary
{
    public class DPD_API
    {
        #region public class variables
        private static string dpdapiun = "xxx";
        private static string dpdapipw = "xxx";
        private static string dpdAccountNumber = "xxx";
        private static string dpdapihost = "api.dpd.co.uk";
        private static string dpdapiinserttestshipment = "https://api.dpd.co.uk/shipping/shipment?test=true";
        private static string dpdapiinsertshipment = "https://api.dpd.co.uk/shipping/shipment";
        #endregion

        /// <summary>
        /// Send consignment data to the DPD API to create a shipment and return a consignment number (if successful).
        /// </summary>
        /// <param name="geoClientData"></param>
        /// <param name="JSONData"></param>
        /// <returns></returns>
        public Boolean insertShipment(string geoSession, bool test, out string JSONdata)
        {
            try
            {
                // default output values
                JSONdata = "";
                bool returnValue = false;

                #region create new insert shipment object
                // a large block of code here that serialises a class into JSON, this bit works so I have omitted it to reduce the code I post on the forum
                #endregion

                string InsertShipmentData = JsonConvert.SerializeObject(NewShipmentObject);

                // convert the 'insert shipment' JSON data to byte array for posting
                //byte[] postBytes = Encoding.UTF8.GetBytes(InsertShipmentData);

                // set the target uri for the insert shipment request (defaults to test, or switch to live as per input parameter)
                Uri targetURI = new Uri(dpdapiinserttestshipment);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(dpdapiinserttestshipment);
                if(!test)
                {
                    targetURI = new Uri(dpdapiinsertshipment);
                    request = (HttpWebRequest)WebRequest.Create(dpdapiinsertshipment);
                }

                // add headers to the web request for inserting a new shipment
                request.Host = dpdapihost;
                request.ContentType = "application/json";
                request.Accept = "application/json";
                request.Method = "POST";
                request.Timeout = 30000;
                request.KeepAlive = true;
                request.AllowAutoRedirect = false;
                request.Headers["GEOClient"] = "thirdparty/" + dpdAccountNumber;
                request.Headers["GeoSession"] = geoSession;

                using (var streamWriter = new StreamWriter(request.GetRequestStream()))
                {
                    streamWriter.Write(InsertShipmentData);
                }
                var httpResponse = (HttpWebResponse)request.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                }

                //// run the request and read the response header
                //using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                //{
                //    using (var sr = new StreamReader(response.GetResponseStream()))
                //    {
                //        JSONdata = Convert.ToString(sr.ReadToEnd());
                //    }

                //    // check if OK (status 200) returned
                //    if (response.StatusCode.ToString() == "OK")
                //    {
                //        returnValue = true;
                //    }
                //    else
                //    {
                //        returnValue = false;
                //    }
                //    return returnValue;
                //}

                return returnValue;
            }
            catch (Exception ex)
            {
                JSONdata = Convert.ToString(ex);
                return false;
            }
        }
    }
}

0 个答案:

没有答案