有意义的url路由

gjmwrych  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(378)

我正在尝试找出一种更好的方法来在url中生成产品名称。因此,我不想用产品的id来表示产品,而是想知道产品的名称。
例如:https://localhost:44233/产品/细节/苹果
而不是
https://localhost:44233/产品/细节/2
到目前为止,我已经将startup.cs文件中的路由模板从默认更改为我在下面发布的模板。它还没有成功。
任何关于如何解决这个问题的建议都会有帮助!
启动.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);
}

回购服务

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();
   }
}

间接的

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>
cnh2zyt3

cnh2zyt31#

到目前为止,我已经在startup.cs中更改了路由模板
因此完全忽略了这就像是多年来遗留的技术。
属性路由允许您在每个控制器上的每个操作上定义自定义路由。尤其是dotnetcore正在为此进行优化(今年推出了2.2版的新路由引擎)。

相关问题