[英]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.