Значимая URL-маршрутизация в ASP.NET CORE - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь найти лучший способ генерировать названия продуктов в 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>

1 Ответ

0 голосов
/ 10 сентября 2018

Пока что я изменил свой шаблон маршрутизации в моем StartUp.cs

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

Маршрутизация атрибутов позволяет вам определять собственные маршруты для каждого действия на каждом контроллере. Для этого особенно оптимизировано ядро ​​dotnet (с новым механизмом маршрутизации в 2.2, который выйдет в этом году).

...