CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Ghi nhật ký truy cập Action-Controller trong ASP.NET Core 6 sử dụng ActionFilterAttribute

Đăng lúc: 10:36 PM - 14/11/2023 bởi Charles Chung - 562

Trong bài viết này tôi sẽ chia sẻ với các bạn cách lấy tên Action và Controller mỗi khi chúng được truy cập và lưu vào tệp tin Log kèm thời gian truy cập.

1. Giới thiệu

Ghi nhật ký truy cập website là phương pháp khá phổ biến trong quá trình phát triển ứng dụng web, nó giúp chúng ta kiểm soát được tần suất và hành vi của người dùng khi truy cập vào action, controller. Để triển khai được việc này các bạn cần tạo một lớp kế thừa từ lớp ActionFilterAttribute trong Microsoft.AspNetCore.Mvc.Filters namespace, đây là lớp Abstract Annotation / Attribute kiểm soát các Action và Result khi nó được gắn (khai báo) với Controller bất kỳ.

2. Tạo lớp ActionControllerLog

public class ActionControlerLog : ActionFilterAttribute

{

        public override async void OnActionExecuting(ActionExecutingContext context)

        {

            //lấy tên controller truy cập

            var controller = context.RouteData.Values["controller"];

            //lấy tên action truy cập

            var action = context.RouteData.Values["action"];

            //lấy đường dẫn thư mục wwwroot/Log

            var folerlog = Path.Combine(Path.GetFullPath("wwwroot"), "Log");

            if(controller != null && action!=null)

            {

                //nếu chưa tồn tại thư mục Log thì tạo

                if(!Directory.Exists(folerlog))

                {

                    Directory.CreateDirectory(folerlog);

                }

                //lấy đường dẫn tệp tin actionlog.csv

                var filelog = Path.Combine(folerlog, "actionlog.csv");

                //nếu chưa tồn tại actionlog.csv thì tạo

                if (!File.Exists(filelog))

                    File.Create(filelog);

                //mở tệp tin actionlog.csv để ghi bổ xung

                using (var writer = new StreamWriter(filelog, true))

        {

                   await writer.WriteLineAsync(action+","+controller+","+DateTime.Now.ToString("hh:mm:ss tt dd/MM/yyyy"));

         }        

        }

      }

    }

 

3. Gắn (khai báo) ActionControllerLog vào HomeController

 

[ActionControlerLog]

    public class HomeController : Controller

  {

        public IActionResult Index()

    {

            return View();

    }

        public IActionResult Privacy()

    {

            return View();

    }

  }

 

4. Kết quả

 

 

Như vậy chúng ta đã lưu được lịch sử truy cập các Controller/Aciton, các bạn có thể phát triển lưu thêm tên người dùng, địa chỉ IP (xem bài Lấy IP Address V4 của máy Client khi truy cập vào Website trong Asp.net Core 6.0) và lưu trữ vào database nhé. Mọi thắc mắc xin liên hệ thầy Charles Chung để được giải đáp.

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ