0

asp.netmvcに付属している組み込みのフォーム認証を使用しています。aspnet_regsqlウィザードを使用して必要なすべてのテーブルをSQLServerに追加しましたが、すべてが統合され、完全に機能しています。これで、ユーザーの追加、ログイン、承認の制御などを行うことができます。

次のステップは、ユーザーがアクションを実行したときにいくつかの基本的なログを追加することです。たとえば、UserAdministrationを使用してデータベースからユーザーを削除したユーザー、または情報が制限されたビューにアクセスしたユーザーをログに記録したいとします(これらは単なる例です)。

認証にはaspnetWebEventEventsというテーブルが付属しているのを見てきましたが、これはWebサイトで発生した例外を格納することだけを目的としており、web.configで構成されており、すべて自動的に実行されます。すべてのフィールドに手動で入力しなくても、クラスを呼び出してカスタムアクションをログに記録したいと思います。

Logger.Log("Action performed");

そして、ユーザー、時間、およびこれらすべてのフィールドを自動的に保存します。

このようなことを行うには、すでに実装されているクラスが必要であり、すでに実行されているものを書き直したくありません。

内部で呼び出されるSqlWebEventProviderを使用してみましたが、このクラスは内部であるため、使用するためのものではありません。

たぶん私は間違っています、これはカスタムアクションをログに記録することを意図していないので、カスタムアクションを使用して独自のテーブルを作成する方がよいでしょう...

4

1 に答える 1

0

でそれを達成できるかどうかはわかりaspnetWebEventEventsませんが、この大量の機能の意図ではないと私が思う特定の状況をログに記録したいようです。

ActionFiltersを試しましたか?これを使用して実際に特定のログを記録できます。たとえば、結果タイプをチェックして、ユーザーがそのアクションを使用しようとしたときに何が起こったかを確認できます。また、ActionExecutedContext:を介してRouteData値にアクセスできます。

public class LogActionFilter : ActionFilterAttribute 
    {
        public override void  OnActionExecuted(ActionExecutedContext filterContext)
        {

            if (filterContext.Exception != null)
            {
                //Log - Exception Cases
            }
            else if(filterContext.Result.GetType() == typeof(RedirectToRouteResult))
            {
                //Log - Redirect to other Action
            }
           else 
            {
                //Log the normal behavior 
            }
        }

   }

次に、ログに記録するアクションをこの属性で装飾します。

[LogActionFilter]
public ActionResult Edit(int id)
{
}
于 2009-12-10T16:17:39.037 に答える