3

主な質問

さまざまな基礎となるメタデータに応じて、フォームのさまざまなバリエーションを表示する単一のフォームがあります。1 つのケースでは、展開されたアプリケーション (dev および qa 環境で正常に動作) でのみ、フォームの 1 つのバリアントが 500 内部サーバー エラーを引き起こします。開発環境とライブ環境の両方でサーバーに送り返されたデータを調べましたが、まったく違いはありません。

問題は、この 500 エラーを追跡するにはどうすればよいかということです。elmah をインストールしましたが、つまずくことはありません。POST ハンドラの最初のアクションとして Logging ステートメントを設定しましたが、実行されません。web.config で設定<customErrors mode="Off"/>しましたが、適切なエラー メッセージが表示されません。私が考えることができる唯一のことは、ある種のルーティングの問題があるということですが、同じデータが他のサーバーへのルーティングに問題なく機能するため、それは実際には正しくありません。

では、このとらえどころのないバグを追跡するには、他に何ができるでしょうか?

背景情報

作成中のアプリにレポート モジュールがあり、それはメタデータ ドリブンです。実行するレポートを選択すると、ソフトウェアはレポートのメタデータを取得し、収集する必要があるパラメーターを特定し、ユーザーからそれらを収集するためのフォームを表示します。ユーザーがフォームに入力したら、ボタンをクリックすると、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 }
        );


    }
}

Ajax 郵便番号

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

この場合の答えは、ライブ Web サーバーでアプリを実行することでした。

それが完了すると、エラーの詳細を確認できました。<customErrors mode="Off"/>web.config の設定で同じことができると思っていましたが、明らかに間違っていました。

とにかく、Web サーバー自体からブラウザーを実行した後、エラーが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 に答える