Я пытаюсь найти лучший способ генерировать названия продуктов в URL. Таким образом, вместо того, чтобы продукты были представлены их идентификатором, я бы хотел название продуктов.
Например:
https://localhost:44233/Products/Detail/Apples
вместо
https://localhost:44233/Products/Detail/2
Пока что я изменил свой шаблон маршрутизации в моем файле StartUp.cs по умолчанию на тот, который я опубликовал ниже. Это не сработало.
Любые предложения о том, как это исправить, помогут!
StartUp.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "Products",
template: "{controller=Products}/{action=Detail}/{name}"
);
});
Модель
public class ProduceDetailVM
{
public int Id {get; set;}
public string ProduceName {get;set;}
public string ProducePrice {get;set;}
public string ProduceDescription {get;set;}
}
Контроллер продуктов
public async Task<IActionResult> Detail(int Id, string name)
{
var produceDetail = repoService.GetById(Id);
var produceName = repoService.GetByProduceName(name);
var produceModel = new ProduceDetailVM()
{
Id = produceDetail.Id,
ProduceName = produceName.Name,
ProducePrice = produceDetail.Price,
ProduceDescription = produceDetail.Description
};
return View(produceModel);
}
RepoService
public class RepoService: IRepository
{
public ProductsTable GetById(int Id)
{
return _context.ProductsTable.Where(i => i.Id == Id).First();
}
public ProductsTable GetByProduceName(string name)
{
return _context.ProductsTable.Where(p => p.ProduceName == name).FirstOrDefault();
}
}
IRepository
public interface IRepository
{
ProductsTable GetById(int Id);
ProductsTable GetByProduceName(string name);
}
Детальный просмотр
<html>
<head>
<title>Detail Page</title>
</head>
<body>
<div class="container-fluid">
<span class="image card" style="background-image:url(produceDetail.ProductImage)"></span>
<div class="center">
<a class="button" asp-controller="Products" action="Detail" asp-route-id="@produceDetail.ProduceName">View More</a>
</div>
</div>
</body>
</html>