Vấn đề trong việc chuyển id thành slug asp net core 3.1

Em đang nghiên cứu cách để chuyển các parameter thành slug khi hiển thị. Ví dụ, nếu truy cập

localhost:44368/bai-viet/1

thì em muốn chuyển nó thành

localhost:44368/bai-viet/day-la-tieu-de-bai-viet

Em có tham khảo theo bài viết này link.
Tuy nhiên trong class SlugToIdAttribute thì nó báo là không có ActionParameters trong ActionExecutingContext. Giờ mà em muốn replace id thành slug thì phải sửa thế nào ạ :frowning: Em xài asp.net core 3.1

SlugToIdAttribute.cs

public class SlugToIdAttribute : ActionFilterAttribute
{
    private AppDbContext _dbContext;

    public SlugToIdAttribute(AppDbContext dbContext)
    {
        _dbContext = dbContext;
    }
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var id = Convert.ToInt32(context.RouteData.Values["id"]);
        var query = _dbContext.PostEntities.First(x => x.Id == id);
        // lỗi ở đây
        context.ActionParameters["slug"] = Slugify.GenerateSlug(query.Title);
        base.OnActionExecuting(context);
    }
}

Controller.cs

[ServiceFilter(typeof(SlugToIdAttribute))]
[Route("{id:int}")]
public IActionResult Post(int id)
{
    var query = (from a in _dbContext.PostEntities
                 join b in _dbContext.CategoryBlogEntities on a.CategoryId equals b.Id
                 join e in _dbContext.AccountManagerEntities on a.CreatedBy equals e.Account
                 join f in _dbContext.AccountImageEntities on e.Account equals f.Account
                 join g in _dbContext.FileManageEntities on f.FileId equals g.Id
                 join h in _dbContext.UserEntities on e.Account equals h.Account
                 where a.IsDeleted == false && a.Id == id
                 where f.IsAvatar == true
                 select new PostDetailModel()
                 {
                     Id = a.Id,
                     Title = a.Title,
                     Slug = Slugify.GenerateSlug(a.Title),
                     AuthorName = h.FirstName + " " + h.LastName,
                     CreatedDate = a.CreatedDate,
                     Description = a.Description,
                     Content = a.Content,
                     AuthorRole = e.Role,
                     Category = b.Name,
                     Avatar = g.FilePath
                 }).First();
    var tags = (from x in _dbContext.PostTagEntities
                join y in _dbContext.TagEntities on x.TagId equals y.Id
                where x.PostId == id
                select y.Name).ToList();
    query.Tag = tags;
    return View(query);
}

Startup.cs

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "Admin",
        pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

Bạn thử thay ActionParameters thành ActionArguments. Có thể code trong bài hướng dẫn không dùng .net core 3.1.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?