ASP.NET Core 8.0 - Tính năng asp-append-version không thêm phiên bản vào tệp tin
Ngày cập nhật: 12/10/2024
Lượt xem: 660
Số từ: 593
Danh mục: Windows
Trong quá trình phát triển một ứng dụng web ASP.NET Core 8.0, mình sử dụng tính năng asp-append-version="true"
để tự động thêm phiên bản (hash) vào các tệp JavaScript và CSS nhằm tránh việc trình duyệt cache lỗi.
Mã nguồn như sau:
|
|
Tính năng này hoạt động tốt trong thời gian đầu, nhưng đột nhiên không còn hoạt động nữa — tức là không có tham số phiên bản được thêm vào URL của tệp tin.
Nguyên nhân gây ra sự cố
Để thuận tiện khi Nginx chuyển tiếp yêu cầu đến đường dẫn /tools4
tới dịch vụ ASP.NET Core, mình đã thiết lập một tiền tố chung cho toàn bộ ứng dụng. Tuy nhiên, việc tính toán phiên bản (v=...
) dựa trên nội dung tệp tin trong thư mục wwwroot
. Khi mình thêm tiền tố /tools4
thủ công vào đường dẫn, điều này khiến hệ thống không thể tìm thấy đúng vị trí tệp tin gốc để tính hash.
Ví dụ:
|
|
Chính tiền tố /tools4
ở đây là nguyên nhân khiến tính năng asp-append-version
thất bại.
Cấu hình app.UsePathBase trong Program.cs
Để giải quyết, mình đã sử dụng phương pháp app.UsePathBase("/tools4")
, giúp áp dụng tiền tố cho toàn bộ ứng dụng mà không cần cấu hình phức tạp từng route hay static file bằng MapGroup
.
Cụ thể:
|
|
Phương pháp này đơn giản hơn rất nhiều so với việc cấu hình StaticFileOptions.RequestPath
từng phần.
Kiểm tra thử nghiệm
Sau khi áp dụng UsePathBase
, tính năng asp-append-version
hoạt động trở lại bình thường.
Điều đáng ngạc nhiên là cả hai URL sau đều có thể truy cập được:
- `
- `
Các tệp tĩnh trong wwwroot
cũng được xử lý phù hợp theo tiền tố đã thiết lập.
Trên StackOverflow cũng có người gặp tình huống tương tự và hỏi tại sao các route ban đầu vẫn chạy được dù đã dùng UsePathBase
. Tuy nhiên hiện tượng này không ảnh hưởng lớn đến việc sử dụng nên mình tạm thời bỏ qua.
Link
Định dạng URL sau khi thêm phiên bản
Với đoạn mã cshtml như sau:
|
|
Kết quả sinh ra sẽ là:
|
|
Lưu ý rằng cả hai URL đều có thể truy cập được, tuy nhiên nếu bạn thử dùng tiền tố không tồn tại như /tools5
, sẽ nhận được lỗi 404.
Thiết lập PathBase qua appsettings.json (không bắt buộc)
Bạn có thể cấu hình PathBase
thông qua tệp appsettings.json
hoặc appsettings.Development.json
để phân biệt môi trường phát triển và sản phẩm. Điều này đặc biệt hữu ích khi chạy ứng dụng ở chế độ watch, vì bạn không cần nhập tiền tố mỗi lần khởi động lại.
Tuy nhiên, do cả hai URL (có và không có tiền tố) đều hoạt động ổn định, nên trong giai đoạn phát triển và debug, việc thiết lập riêng PathBase = "/"
là không cần thiết.
Tài liệu
Nếu bạn gặp phải vấn đề tương tự, hy vọng bài viết này sẽ giúp bạn hiểu rõ nguyên nhân và cách khắc phục hiệu quả.