You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core中如何移除URL中的ID,改用商品名称作为路由参数?

实现商品详情页URL从ID到商品名称的转换

步骤1:调整路由与控制器逻辑

修改路由特性和方法参数,将接收ID改为接收商品名称,同时更新商品查询逻辑:

[Route("/Product/{productName}")]
public IActionResult ShowProduct(string productName)
{
    // 若存在同名商品,建议改用唯一的Slug字段(如"productName-109")查询以避免冲突
    var product = _productRipository.GetProductByProductName(productName);
    
    if (product == null)
    {
        return NotFound();
    }

    // 修正原有代码错误:用Where做筛选,而非Select(Select是投影操作)
    ViewBag.ProductGalleries = product.Product_Galleries
                                      .Where(p => p.ProductID == product.ProductID).ToList();
    ViewBag.ProductFeatures = product.Product_Features
                                     .Where(p => p.ProductID == product.ProductID).ToList();
    ViewBag.ProductVideos = product.Product_Videos
                                   .Where(p => p.ProductID == product.ProductID).ToList();
    ViewBag.ProductFiles = product.Product_Files
                                  .Where(p => p.ProductID == product.ProductID).ToList();

    return View(product);
}

步骤2:实现按商品名称查询的仓库方法

在你的商品仓储类中添加对应的查询方法:

public Product GetProductByProductName(string productName)
{
    // 大小写不敏感匹配,避免因URL大小写导致404
    return _context.Products.FirstOrDefault(p => p.ProductName.Equals(productName, StringComparison.OrdinalIgnoreCase));
}

步骤3:优化URL友好性(可选但推荐)

直接使用原始商品名称可能包含空格、特殊字符,建议生成URL友好的Slug:

  • 在商品实体中新增Slug字段,存储处理后的名称(例如"智能手表"转成"zhi-neng-shou-biao",英文名称转成"smart-watch")
  • 将路由改为/Product/{slug},查询时匹配Slug字段
  • 在商品创建/编辑时自动生成Slug,比如通过替换空格、移除特殊字符实现

关键注意事项

  • 若存在同名商品,必须结合ID生成唯一Slug(如"smart-watch-109"),否则会出现URL冲突
  • 确保页面中生成商品详情链接的地方,从原来的/Product/{id}更新为/Product/{productName}或/Product/{slug}

内容的提问来源于stack exchange,提问作者soheila

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:20:55