【发布时间】:2021-12-13 08:31:12
【问题描述】:
我正在开发一个 mvc core 3.1 应用程序。 SEO 要求是用主站点而不是完整的 url 显示产品名称。
我原来的网址是
www.abc.com/Fashion/ProductDetail?productId=5088&productName=AliviaBlack&brandId=3
要求是
www.abc.com/alivia-black
我尝试过使用属性路由来跟踪
endpoints.MapControllerRoute(
name: "SpecificRoute",
pattern: "/{productName}",
defaults: new { controller = "Fashion", action = "ProductDetail", id= "{productId}" });
在查看页面中
<a asp-route-productId="@product.ProductId"
asp-route-productName="@Common.FilterURL(product.ProductName)"
asp-route-brandId="@product.FashionBrand.FashionBrandId" asp-route="SpecificRoute">
结果是
www.abc.com/alivia-black?productId=5223&brandId=4
如何去掉问号和后面的参数。
【问题讨论】:
-
我完全不推荐使用
<a asp-route-...,因为它太不灵活了。而是使用您自己的自定义 URL 生成方法。并且您仍然应该包含数字productId值(作为路由参数,而不是查询字符串参数) - 否则重命名产品时链接会中断。 -
您使用的是 ASP.NET MVC 还是 ASP.NET Core?您已将您的问题标记为两者,这是错误的。
-
@Dai 感谢您的评论。是否可以在 get 请求中隐藏 productId 和 brandId 或者我必须将其更改为通过 ajax 发布请求?
-
我认为您没有阅读我发布的链接。您需要在您的 URI 中包含
productId(但它不需要是查询参数)。如果您不这样做,那么您将遇到链接断开的无穷无尽的问题。另外,我怀疑您不熟悉 HTTP 的工作原理,因为您似乎误解了 POST 请求的确切工作原理。
标签: asp.net-mvc asp.net-mvc-5 asp.net-core-3.1