Одинаковая конечная точка URL в Razor Pages - PullRequest
1 голос
/ 15 января 2020

Возможно ли добиться этого в Razor Pages:

Product.cshtml @page "/{url_product}" - получить URL-адрес, дружественный из базы данных / таблицы продуктов

Category.cshtml @page "/{url_category}" - получить URL-адрес, дружественный из базы данных / таблицы категорий

Я хочу добиться этого:

www.domain.com/url-friendly-product

www.domain.com/url-friendly-category

Я пробовал ограничение, и оно работает, но мне нужно, чтобы каждый запрос совпадал с URL из базы данных из обеих таблиц, и я Я боюсь за производительность приложения.

Можно ли сделать это другим способом?

1 Ответ

0 голосов
/ 15 января 2020

У меня есть это пользовательское ограничение, и если в базе будет 10 000 товаров для каждого запроса, я думаю, что это не хорошо.

Есть ли другие варианты для достижения этой цели? Или это только так?

    private readonly IMemoryCache _cache;
    public ProductConstraint(IMemoryCache cache)
    {
        _cache = cache;
    }

    public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (_cache.Get("URLProductListCache") == null)
        {
            var cacheEntry = _cache.CreateEntry("URLProductListCache");
            var _context = (ApplicationDbContext)httpContext.RequestServices.GetService(typeof(ApplicationDbContext));
            var url = _context.Product.AsNoTracking().Select(c => c.URL).ToList();
            cacheEntry.SetValue(url);
            cacheEntry.Dispose();

            return url.Contains(values[routeKey]?.ToString().ToLowerInvariant());
        }
        else
        {
            var url = _cache.Get("URLProductListCache") as List<string>;
            return url.Contains(values[routeKey]?.ToString().ToLowerInvariant());
        }
    }
...