1

ASP.NET MVC 4 RTWを使用して、MVCコントローラーのアクションとパラメーターをデータベースに記録するにはどうすればよいですか?ユーザーアクションを監査したいのですが、すべてのコントローラー内、さらに悪いことに、すべてのアクション内に大量のコードを複製したくありません。グローバルに実装できるものはありますか?私は物事のEF/データベース側を理解しているので、これは本当にMVCについてです。

4

1 に答える 1

2

カスタムアクションフィルターを確認する必要があります。ここに良いMSDNの記事http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx

filterContext.ActionDescriptor.ActionNameは、ログに記録するアクションの名前を提供します。また、filterContext.ActionDescriptor.ControllerDescriptor.ControllerNameが役立つ可能性があり、パラメーターはfilterContext.ActionParametersに保持されます。

これらのフィルターは、configGl​​obal.asaxまたはFilterConfigの下のApp_Startフォルダー内のすべてのアクションにグローバルに適用できます。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new LoggingFilterAttribute());
}

属性のサンプルコード

public class LoggingFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write("(Logging Filter)Action Executing: " +
            filterContext.ActionDescriptor.ActionName);

        base.OnActionExecuting(filterContext);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Exception != null)
            filterContext.HttpContext.Trace.Write("(Logging Filter)Exception thrown");

        base.OnActionExecuted(filterContext);
    }
}
于 2012-09-13T20:20:03.183 に答える