C#PostAJAXの空のjson結果

Aug 19 2020

ページをリロードせずにアクションを実行して結果を返すPOSTAjaxリクエストを作成します。
このためにJSON結果を使用しますが、問題は、アクション「foo.DoSyncAction(id)」の実行に時間がかかると、返されるメッセージがnullになることです。
たとえば、例外が発生すると、例外はキャッチされますが、彼のメッセージはnullです。

例外がスローされない場合も同じことが起こり、「actionResult」はnullです。
時間がかからないアクションを使用すると、返されるメッセージはnullまたは空ではありません。
そして、それはデバッグモードでは起こりません、私のページに返されるメッセージはnullではありません。
忘れたか何か間違ったことをしていると思いますが、何が悪いのかわかりません。

[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);
    }
}

私のAJAXクエリ:

$.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);
    }
});

ここでは似たような状況の例である:dotnetfiddle.net/cG2L0u私は10秒待ちでSagnalrac例を使用し、私の問題が発生しました。アイテムのリストは表示されなくなり、console.logは空の文字列を返します。.NET4.8でASPMVC5を使用しています

回答

Tanguy Aug 23 2020 at 17:01

私は自分の問題を解決しましたが、まだいくつかの誤解があります。

私のメソッドは、メソッドを実行しているアカウントに体系的に関連する例外を返します(そのため、デバッグでは機能しますが、Webサーバーでは、使用されるアカウントが異なるため、機能しません)。

奇妙なことに、私のメソッドは例外をスローします。それをキャッチしてメールで送信することさえできます。ただし、コントローラーが例外をキャッチすると、コントローラーは空またはnullになります。この問題を詳しく見ていきます。

問題を修正したら、2分のタイムアウトを追加しようとしましたが、問題は発生しませんでした(この例では、dotnetfiddleの構成が私のものとは異なるため、例外は表示されません)。