繁体   English   中英

ASP.NET CORE中有意义的URL路由

[英]Meaningful URL routing in ASP.NET CORE

我正在尝试找出一种更好的方法来生成URL中的产品名称。 因此,我想用产品的名称代替产品以其ID表示。

例如: https:// localhost:44233 / Products / Detail / Apples

代替

https://开头本地主机:44233 /产品/详细信息/ 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>

到目前为止,我已经在StartUp.cs中更改了路由模板

因此,人们完全忽略了这就像多年来的传统技术一样。

通过属性路由,您可以在每个控制器的每个操作上定义自定义路由。 特别是dotnet核心正为此而被优化(今年将推出2.2中的新路由引擎)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM