1

テスト中に相反する情報を提供するクライアントがいます。彼らは嘘をついているとは思いませんが、もっと混乱しています。そこで、ASP.Net アプリケーションで簡単な監査をセットアップしたいと思います。具体的には、任意のページが呼び出されたときに、すぐにクエリ文字列やフォーム POST データをログ テーブルに挿入したいと考えています。生の値のみ。

クエリ文字列は簡単です。しかし、BinaryRead を使用せずに生のフォーム POST されたデータを取得する方法はないようです。それを行うと、後で Request.Form コレクションを使用することをやめてしまいます。

誰もこれを回避する方法を知っていますか?

編集: tvanfosson は Request.Params を提案しました。もっと使いやすいものを探していました (Request.Querystring のように、POST 専用です) が、すべてのパラメーターを簡単にループして、name=value& などの文字列を作成できると思います)。

4

3 に答える 3

3

カスタムHttpModuleを作成して、アプリケーションに対して行われたすべてのリクエストをキャプチャできるため、すべてのページに触れる必要はなく、本番環境のパフォーマンスを低下させないために、テスト中にのみ使用できます。

実装例は次のとおりです。

public class CustomModule : IHttpModule 
{
    public void Init(HttpApplication context)
    {
        context.EndRequest += new EventHandler(context_BeginRequest);
    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        // you can use the context.Request here to send it to the database or a log file
    }
}

モジュールをweb.configに追加する必要があります

<httpModules>
    <add name="CustomModule" type="CustomModule"/>
</httpModules>
于 2008-10-12T00:45:49.140 に答える
2

すべてのフォームデータはRequest.Paramsにある必要があります。ただし、すべてのページでこれを行う必要があります。または、HttpModuleを使用することもできます。

[編集]フォームパラメータを個別に取得する場合は、Request.QueryStringとともにRequest.Formを使用ます

于 2008-10-11T22:54:54.293 に答える
1

このタイプのシナリオでは、HttpHandlerまたはHttpModuleを実装することをお勧めします。Page_LoadイベントからPOSTデータにアクセスできますが、このロギング機能をここに実装することは、それほど維持可能ではありません。

于 2008-10-11T23:00:41.927 に答える