質問

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

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

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

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

役に立ちましたか?

解決

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

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

他のヒント

カスタム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>

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top