You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor页面加载异常无报错,部分生产实例故障排查求助

问题描述

我有一个包含多个AJAX函数用于获取和更新数据的Razor页面,该页面在本地环境及部分生产实例中运行正常,但在少数生产实例中,Chrome控制台提示500错误。我已添加全量日志,但未发现应用本身的错误(若应用存在问题,理应所有实例都故障)。

通过日志发现异常实例存在诡异行为:正常实例仅调用一次OnGet方法,后续均调用OnPostIndexPartial;而故障实例会调用两次OnGet方法,之后便无任何响应。我已添加逻辑确保OnGet仅调用一次,日志显示调用次数变为一次,但页面仍无法加载(连OnGet都未正常执行)。

我已耗费数小时排查仍毫无头绪,不清楚为何初始页面都无法渲染,导致后续的OnPostIndexPartial也无法执行。若有人遇到过类似情况,能提供排查思路或建议,我将万分感谢。

编辑补充

处理请求的PageModel代码(已移除部分代码)

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using DTEmbarcado.Controllers;
using System.Linq;
using System;
using System.Text;
using System.Collections;
using System.Text.Json;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using DTEmbarcado.DTOS;
using System.IO;
using System.Threading;
using static System.Net.Mime.MediaTypeNames;

namespace DTEmbarcado.Pages
{
    public class IndexModel : PageModel
    {
        public bool initialPetitionDone = false;

        public IndexModel()
        {

        }

        public JsonResult OnPostHeartbeatPartial(string name)
        {
            GlobalConstants.logger.insertaLog("OnPostHeartbeatPartial", DTLogger.INFO);
            Object json = null;
            try
            {

                if (!string.IsNullOrEmpty(name))
                {
                    json = System.Text.Json.JsonSerializer.Serialize("OK");
                }
            }
            catch (Exception ex)
            {
                GlobalConstants.logger.insertaLog($"OnPostHeartbeatPartial ERROR: {ex.Message} : {ex.StackTrace} : {ex.InnerException}", DTLogger.ERROR);
            }
            return new JsonResult(json);
        }

        public void OnGet()
        {
            GlobalConstants.logger.insertaLog("GET Index", DTLogger.INFO);
            try
            {
                if (!initialPetitionDone)
                {
                    initialPetitionDone = true;
                    
                    //SOME CODE
                }
            }
            catch (Exception ex)
            {
                GlobalConstants.logger.insertaLog($"GET Index ERROR: {ex.Message} : {ex.StackTrace} : {ex.InnerException}", DTLogger.ERROR);
            }
        }

        public JsonResult OnPostIndexPartial(string visualizationOptions, string searchPorts, string searchVars)
        {
            GlobalConstants.logger.insertaLog("ON POST INDEX PARTIAL", DTLogger.INFO);
            var json = "";
            try
            {
                //SOME CODE
                this.Data = result;
                json = System.Text.Json.JsonSerializer.Serialize(this.Data);
            }
            catch (Exception ex)
            {
                GlobalConstants.logger.insertaLog($"OnPostIndexPartial ERROR: {ex.Message} : {ex.StackTrace} : {ex.InnerException}", DTLogger.ERROR);
            }
            return new JsonResult(json);
        }
    }
}

CSHTML页面中的JavaScript代码

@page
@addTagHelper*, Microsoft.AspNetCore.Mvc.TagHelpers
@model DTEmbarcado.Pages.IndexModel
@{
    ViewData["Title"] = "Title";
}

<div id="body" class="col-12 border text-left p-3 mt-3 d-flex">
    <table id="valuesTable" class="table table-striped">
        <thead>

        </thead>
        <tbody>
            @try
            {
                @if (Model.Data != null)
                {
                    //Some code
                }
            }
            catch (Exception ex)
            {
                GlobalConstants.logger.insertaLog($"Ha ocurrido un error cargando Model.Data: {ex.Message}
 {ex.InnerException} 
 {ex.StackTrace}",DTLogger.ERROR);
            }
        </tbody>
    </table>
</div>

@section scripts{

    @*GLOBALS*@
    <script>
        var sendRequest = true;
        var sendHeartbeat = false;
        function pop(div) {
            document.getElementById(div).style.display = 'block';
        }

        function hide(div) {
            document.getElementById(div).style.display = 'none';
        }
    </script>

    @*HEARTBEAT*@
    <script>
        var refreshTime = 2000;
        const currentUrl = window.location.href;

        $(function () {
            setInterval(setHeartbeat, refreshTime);
            setHeartbeat();
        });

        function setHeartbeat(){
            if (sendHeartbeat){
                pop('popDiv');
                var xhr = $.ajax({
                    type: "POST",
                    timeout: 1000,
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val());
                    },
                    url: '/?handler=HeartbeatPartial',
                    data: {
                        name: name
                    },
                    dataType: 'json',
                    headers: {
                        'Content-encoding': 'gzip'
                    },
                    success: function (data) {
                        hide('popDiv');
                        sendHeartbeat = false;
                        sendRequest = true;
                    },
                    error: function (xmlhttprequest, textstatus, message) {
                        if (textstatus === "timeout") {
                            xhr.abort();
                        }
                        pop('popDiv');
                        sendRequest = false;
                        sendHeartbeat = true;
                    }
                })
            }
        }
        //# sourceURL=heartbeatSource
    </script>

    @* REFRESH SCRIPT *@
    <script type="text/javascript">
        var refreshTime = 1000;
        var VOArray = [];

        $(function () {
            setInterval(loadTable, refreshTime);
            loadTable();
        });

        function loadTable() {
            //TIMEOUT
            var isDataReceived = false;
            //SOME CODE
            //FLAG SETTING
            if(sendRequest){
                hide('popDiv');
                //AJAX CALL
                var xhr = $.ajax({
                    type: "POST",
                    timeout: 3000,
                    beforeSend: function (xhr) {
                        //console.log("Sending POST request");
                        xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val());
                    },
                    url: '/?handler=IndexPartial',
                    data: {
                        visualizationOptions: visualizationOptions,
                        searchPorts: searchPorts,
                        searchVars: searchVars
                    },
                    dataType: 'json',
                    headers:{
                        'Content-encoding':'gzip'
                    },
                    success: function (data) {
                        keys = []
                        isDataReceived = true;
                        var jsonObject = JSON.parse(data);
                        if(Object.keys(jsonObject).length === 0){
                            $("#valuesTable tbody tr").remove();
                        }else{
                            $.each(jsonObject, function(index, variable){
                                keys.push(variable.name)
                                if(document.getElementById(variable.name)){
                                    document.getElementById(variable.name+"Value").innerText = variable.value;
                                    document.getElementById(variable.name+"LastUpdate").innerText = variable.lastUpdate;
                                }
                                else{
                                    addRow(variable)
                                }
                            })
                        }
                        $('#valuesTable tr').each(function (index, tr) {
                            var name = tr.id
                            if (name !== "") {
                                if (!keys.includes(name)) {
                                    document.getElementById(tr.id).remove();
                                }
                            }
                        })
                    },
                    error: function(xmlhttprequest, textstatus, message) {
                        if(textstatus==="timeout") {
                            xhr.abort();
                        }
                        else if (textstatus === "error"){
                            pop('popDiv');
                            sendRequest = false;
                            sendHeartbeat = true;
                        }
                    }
                })
            }
        }
    //# sourceURL=ChromeConsoleDebug
    </script>
}

@Html.AntiForgeryToken()

内容的提问来源于stack exchange,提问作者Aaron Parrilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:56:00