C # Posting hasil json kosong AJAX

Aug 19 2020

Saya membuat permintaan ajax POST untuk melakukan tindakan dan mengembalikan hasil tanpa memuat ulang halaman.
Untuk ini saya menggunakan Hasil JSON, masalahnya adalah ketika tindakan saya "foo.DoSyncAction (id)" membutuhkan beberapa saat untuk dieksekusi, pesan yang dikembalikan adalah null.
Misalnya ketika pengecualian dimunculkan, pengecualian ditangkap, tetapi pesannya null.

Hal yang sama terjadi jika tidak ada pengecualian yang dilemparkan, "actionResult" adalah null.
Jika saya menggunakan tindakan yang membutuhkan waktu lebih sedikit, pesan yang dikembalikan tidak kosong atau kosong.
Dan itu tidak terjadi dalam mode debug, pesan yang dikembalikan ke halaman saya tidak null.
Saya pikir saya lupa atau saya melakukan sesuatu yang salah, tetapi saya tidak tahu apa yang salah.

[HttpPost]
public JsonResult SomeAction(int id)
{
    try
    {
        Foo foo = new Foo();
        var actionResult = foo.DoSyncAction(id);

        return Json(new { ok = true, data = actionResult }, JsonRequestBehavior.AllowGet); ;
    }
    catch (Exception ex)
    {

        return Json(new { data = ex == null ? "null ex" : (string.IsNullOrEmpty(ex.Message) ? "this exception is empty" : ex.Message) }, JsonRequestBehavior.AllowGet);
    }
}

Kueri AJAX saya:

$.ajax({
    url: '@Url.Action("SomeAction", "MyController")',
    dataType: 'json',
    data: { id: myID },
    type: 'POST',
    success: function (response) {
        if (response.ok) {
            // When everything is ok
            console.log(response.data);
        } else {
            // When an exception is thrown
            console.log("An error occurred :  " + response.data);

        }
    },
    error: function (error) {
        console.log("An error occurred :  " + error.responseText);
    }
});

Berikut adalah contoh situasi yang serupa: dotnetfiddle.net/cG2L0u Saya menggunakan contoh Sagnalrac dengan waktu tunggu 10 detik, dan masalah saya terjadi. Daftar item tidak lagi ditampilkan dan console.log mengembalikan string kosong. Saya menggunakan ASP MVC 5 dengan .NET 4.8

Jawaban

Tanguy Aug 23 2020 at 17:01

Saya telah memecahkan masalah saya, tetapi saya masih memiliki beberapa kesalahpahaman.

Metode saya mengembalikan pengecualian secara sistematis terkait dengan akun yang menjalankan metode (itulah mengapa dalam debug itu berfungsi, sedangkan di server web tidak, karena akun yang digunakan berbeda).

Hal yang aneh adalah bahwa metode saya membuat pengecualian, saya bahkan berhasil menangkapnya dan mengirimkannya melalui surat. Tapi ketika controller menangkap pengecualian, dia kosong atau null. Saya akan mencoba untuk melihat lebih dekat masalah ini.

Setelah saya memperbaiki masalah, saya mencoba menambahkan waktu tunggu 2 menit, dan tidak ada masalah yang terjadi (saya pikir dalam contoh, dotnetfiddle memiliki konfigurasi yang berbeda dari milik saya, itulah mengapa tidak ada pengecualian yang muncul).