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 - 752Trong 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!
Các bài cũ hơn
- Đa ngôn ngữ sử dụng Internationalization(i18N) và Localization(L10N) trong Spring Web MVC (03:04 PM - 14/11/2023)
- Security trong Spring Web MVC với Hibernate và Oracle Database (08:44 AM - 11/11/2023)
- Authentication và Authorization trong việc bảo mật ứng dụng Web (08:48 AM - 10/11/2023)
- 10 lý do nên chọn Spring Boot để phát triển các ứng dụng Web (09:45 AM - 08/11/2023)
- Hướng dẫn sử dụng CKEditor và Upload file trong Spring MVC (08:58 PM - 07/11/2023)