生成自定义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 -在URL中显示描述

我相信这已经被称为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();
}

谢谢!