3

主要问题

我有一个表单,根据不同的底层元数据将显示表单的不同变体。在单个情况下,仅在已部署的应用程序中(在 dev 和 qa 环境中工作正常),表单的一个变体会导致 500 Internal Server Error。我已经检查了在开发和实时环境中发送回服务器的数据,完全没有区别。

问题是,我怎样才能找到这个 500 错误?我安装了elmah,它没有被绊倒。我已将 Logging 语句设置为我的 POST 处理程序中的第一个操作,但它永远不会执行。我已经<customErrors mode="Off"/>在我的 web.config 中进行了设置,但它并没有向我显示更好的错误消息。我唯一能想到的是我有某种路由问题,但这感觉不太对,因为相同的数据可以很好地路由到其他服务器。

那么,我还能做些什么来追踪这个难以捉摸的错误呢?

背景信息

我正在构建的应用程序中有一个报告模块,它是元数据驱动的。一旦他们选择了他们希望执行的报告,软件就会提取报告的元数据,确定需要收集哪些参数,并显示一个表格以从用户那里收集它们。一旦用户填写了表单,他们点击一个按钮,通过 jquery $.ajax() 调用提交表单。控制器应获取传入的表单帖子,验证表单数据,然后重新显示表单或返回带有 url 的 json 以呈现报告渲染器操作。

路由配置

public class RouteConfig {
    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


        routes.MapRoute(
             name: "Default",
             url: "{controller}/{action}/{id}",
             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );


    }
}

阿贾克斯邮政编码

var ajaxUrl = this.action;
var ajaxType = this.method;
var ajaxData = $(this).serialize();
$.ajax({
    url: ajaxUrl,
    type: ajaxType,
    data: ajaxData,
    success:
        function(result) {
            // did we get a JSON back from the server?
            if (typeof(result) === "object") { //deal with the return result...   
                if (window.console) console.log("-- reportParam form submit passed validation");
                $("#popupDialog").popup("close");
                //need non-ajax version to go to url so we get a dom refresh - we want a new page also
                // window.location.href =
                window.open(result.URL, '_blank');
            } else {
                if (window.console) console.log("-- reportParam form failed validation");
                $('#popupDialog').html(result);
                $('#popupDialog').trigger('create');
                var _RPT = RevTrak.Portal.Report;
                _RPT.Index.initBindings();
            }
        },

    complete: function() {

        if (window.console) console.log("-- paramEdit form submit ajax call complete"); //this indicates we passed validation
    },
    error: function(xhr, textStatus, errorThrown) {
        var sErrMsg = "";
        sErrMsg += "paramEdit form submit error ";
        sErrMsg += "\n\n" + " - textStatus :" + textStatus;
        sErrMsg += "\n\n" + " - Error Status :" + xhr.status;
        sErrMsg += "\n\n" + " - Error type :" + errorThrown;
        sErrMsg += "\n\n" + " - Error message :" + xhr.responseText;

        if (window.console) console.log(sErrMsg)
        alert(sErrMsg);
    }
});

谢谢!

4

1 回答 1

2

在这种情况下,答案是在实时网络服务器上运行应用程序。

完成此操作后,我可以看到有关该错误的更多详细信息。我原以为<customErrors mode="Off"/>web.config 中的设置会完成同样的事情,但显然我错了。

无论如何,在从网络服务器本身运行浏览器之后,我能够看到错误是A potentially dangerous Request.Form value was detected from the client (repModel.sQuery=&quot;...ND THEDATE&lt;DATEADD(dd,1,@dtEnd...&quot;).,这足以让我弄清楚下一步该去哪里。

于 2013-04-30T14:46:40.077 回答