【发布时间】:2018-09-10 18:28:33
【问题描述】:
我正在尝试找出一种更好的方法来在 URL 中生成产品名称。因此,我想要产品的名称,而不是由他们的 ID 表示的产品。
例如: 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);
}
回购服务
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>
【问题讨论】:
-
您仍在使用
Detail()中的Id参数,如果您不再通过路由传入Id,则该参数将失败。如果您想仅使用名称查看产品详细信息,则应通过name检索所有产品详细信息,并且每个产品都应具有唯一的name。 -
谢谢你的丹。不幸的是,产品名称不是唯一的。还有其他我不熟悉的方法吗?
-
没有其他方法可以解决这个问题。如果您想使用标识符(
Id或name)访问产品,则该标识符必须是唯一的。要么坚持使用Id,要么更新您的数据,使name是唯一的。 -
有道理。有没有办法将 Id 作为标识符和名称都包含在内?即localhost:43222/Products/Detail/2/Apple 该怎么做呢?路由属性?还是 startup.cs 中的路由映射?
标签: c# mysql url-routing asp.net-core-2.1