4

stackoverflowでHttpRequestにアクセスすることについては、すでに多くの質問がありますが、まだ使用できるものを見つけることができませんでした。誰かが私に答えを教えてくれたら、私は感謝するでしょう。

私の問題は、完全なリクエストロギングを追加するために、可能な限り簡単な方法で既存のアプリケーションを変更したいということです。これは、HttpモジュールとIISロギング、またはLog4netなどを使用して実行できることを認識しています。ただし、アプリケーションが予測できないため、これらの手法を使用したくないので、構成の変更を必要としないソリューションが必要です。まったく。

OnActionExecutedをベースコントローラーに追加しました。

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    // todo: log request from filter context ....
    base.OnActionExecuted(filterContext);
}

上記の「todo」の部分では、生のhttpリクエストを読み取り、データベースファイルに保存したいと思います。データベースへのログ記録は非常に簡単ですが、httpリクエストを文字列としてシリアル化または変換するための最良の方法は何ですか?

ありがとうございました

4

1 に答える 1

13
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var request = filterContext.HttpContext.Request;
    var inputStream = request.InputStream;
    inputStream.Position = 0;
    using (var reader = new StreamReader(inputStream))
    {
        string headers = request.Headers.ToString();
        string body = reader.ReadToEnd();
        string rawRequest = string.Format(
            "{0}{1}{1}{2}", headers, Environment.NewLine, body
        );
        // TODO: Log the rawRequest to your database
    }
}

ああ、それを始めたら、サーバーに追加のストレージを購入するために必要な予算をすでに計画していることを願っています。Cozは、リクエストごとにrawリクエスト全体のログ記録を開始する場合、ストレージが必要になります。

于 2013-03-06T07:49:32.400 に答える