生成自定义URL -在URL中显示描述
本文关键字:URL 显示 描述 自定义 | 更新日期: 2023-09-27 18:12:44
我有一个带有一些标题字段的产品列表,例如:
ID Title
1 TShirts CK
2 Brand new books
3 Selling whatever I have useless
我这样调用Detail方法:
<a href='@Url.Action("Detail", "Products", new { productId = 3 })'>See detail</a>
[Route("detail/{productId:int}")]
public ViewResult Detail(int productId) {
//...
return View();
}
生成的URL是:
http:example.com/products/detail/3
我想要的是这样显示一个URL:
http://example.com/products/detail/3/selling-wathever-i-have-useless
根据给定的场景,是否有一个漂亮而干净的方法来做到这一点?
我相信这已经被称为URL段塞,这将使它更容易搜索100倍。我建议你从:https://stackoverflow.com/a/2921135/507025开始寻找一个算法来帮助你简化你的url。
如果您有一个包含该信息的数据库,您可能希望将经过简化的描述保存到该数据库中,以便在创建新项目时检查是否有重复项。
Routing将非常相似,尽管你需要将Routing属性更改为:
[Route("detail/{productName:string")]
public ViewResult Detail(string productName)
{
return View();
}
然后,您可以在数据库中搜索指定的描述以返回所搜索的项目,或者使用搜索中给出的术语来返回多个结果。
可能有不同的方法来做到这一点,但现在你知道它被称为"鼻涕虫",你会更容易找到有关它们的信息
您可以有一个路由如下,当您定义Url.Action
时,您可以将产品标题传递给某种方法,该方法将给定的文本转换为URL
友好的文本。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{productId}/{title}",
defaults: new { controller = "Home", action = "Index", productId = UrlParameter.Optional, title = UrlParameter.Optional }
);
<a href='@Url.Action("Index", "Home", new { productId = product.ID, title = ToFriendlyUrl(product.Title) })'>See detail</a>
public ViewResult Detail(int productId, string title)
{
// ...
return View();
}
谢谢!