Я создаю интернет-магазин. И я хочу добавить короткие URL-адреса для продуктов, категорий и так далее.
Например:
store.com / iphone-7-плюс
Эта ссылка должна открыть страницу с продуктом iPhone 7 plus.
Логика:
- Сервер получает URL
- Сервер попробует против существующих маршрутов
- Если для этого пути нет никакого маршрута - сервер просматривает БД и пытается найти товар или категорию с таким названием .
Очевидные решения и почему они не применимы:
Первое решение - это новый маршрут:
public class StringRouter : IRouter
{
private readonly IRouter _defaultRouter;
public StringRouter(IRouter defaultRouter)
{
_defaultRouter = defaultRouter;
}
public async Task RouteAsync(RouteContext context)
{
// special loggic
await _defaultRouter.RouteAsync(context);
}
public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
return _defaultRouter.GetVirtualPath(context);
}
}
Проблема в том, что я не могу предоставить доступ к моей БД с StringRouter
.
Второе решение:
public class MasterController : Controller
{
[Route("{path}")]
public IActionResult Map(string path)
{
// some logic
}
}
Проблема в том, что сервер получает буквально все вызовы типа store.com/robots.txt
Так что вопрос все еще открыт - не могли бы вы посоветовать мне какое-нибудь подходящее решение?