Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Mendapat 'Ralat Pelayan Dalaman 500' Apabila Menyiarkan Data JSON dengan C#?
Menyelesaikan masalah "500 Ralat Pelayan Dalaman" dalam Permintaan C# JSON POST
Menghadapi "500 Ralat Pelayan Dalaman" semasa menghantar data JSON ke pelayan menggunakan C# adalah masalah biasa yang sering disebabkan oleh permintaan yang tidak diformatkan dengan betul. Mari kita periksa cara membetulkannya.
Pertimbangkan coretan kod berikut:
<code class="language-csharp">// create a request HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "POST"; // ... (rest of the original code) ...</code>
Kunci untuk menyelesaikan ralat ini selalunya terletak pada memperhalusi cara data dikendalikan. Berikut ialah pecahan penambahbaikan:
Pengurusan Sumber: Sentiasa gunakan penyataan using
untuk memastikan pelupusan sumber yang betul seperti aliran. Ini menghalang kebocoran sumber dan kemungkinan ralat.
Pensiri JSON: Sirikan objek JSON anda secara eksplisit ke dalam rentetan sebelum dihantar. Menggunakan pustaka seperti Newtonsoft.Json (JsonConvert
) amat disyorkan untuk penyiaran yang mantap.
Pengendalian Strim: Kod asal menetapkan ContentLength
dengan betul, tetapi penambahbaikan pernyataan using
memastikan strim ditutup dengan betul.
Berikut ialah kod yang dipertingkatkan yang menggabungkan perubahan ini:
<code class="language-csharp">using (var request = (HttpWebRequest)WebRequest.Create(url)) { request.KeepAlive = false; request.ProtocolVersion = HttpVersion.Version10; request.Method = "POST"; request.ContentType = "application/json; charset=UTF-8"; request.Accept = "application/json"; string json = JsonConvert.SerializeObject(myObject); // Serialize your object byte[] postBytes = Encoding.UTF8.GetBytes(json); request.ContentLength = postBytes.Length; request.CookieContainer = Cookies; request.UserAgent = currentUserAgent; using (var requestStream = request.GetRequestStream()) { requestStream.Write(postBytes, 0, postBytes.Length); } using (var response = (HttpWebResponse)request.GetResponse()) using (var streamReader = new StreamReader(response.GetResponseStream())) { string result = streamReader.ReadToEnd(); return result; } }</code>
Alternatif: Memudahkan dengan Perpustakaan Luar
Perpustakaan seperti JsonRequest (oleh Ademar Gomes) atau RestSharp boleh memudahkan proses dengan ketara, mengendalikan kebanyakan pengurusan strim peringkat rendah untuk anda. Ini boleh membawa kepada kod yang lebih bersih dan boleh diselenggara.
Pertimbangan Sebelah Pelayan
Ingat untuk menyemak log sisi pelayan anda untuk mendapatkan mesej ralat yang lebih terperinci. "Ralat Pelayan Dalaman 500" adalah generik, dan log pelayan akan memberikan petunjuk tentang punca tertentu (cth., ralat pengesahan, isu pangkalan data, dll.). Pastikan pelayan anda dikonfigurasikan dengan betul untuk mengendalikan permintaan JSON POST dan struktur data yang dijangka sepadan dengan apa yang dihantar oleh kod C# anda.
Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Ralat Pelayan Dalaman 500' Apabila Menyiarkan Data JSON dengan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!