我有一个结果页面,可以在网址末尾添加参数。这些参数代表类别和过滤器,用于网站或电子邮件中的SEO链接。我们目前只允许在route.config中使用4个参数(类别和3个可选过滤器)。所以这将是一个有效的网址:
http://myshoppingsite.com/results/dresses/red/black/blue
routes.MapRoute("ResultsCanonicalFiltered", "results/{Categoy}/{Filter1}/{Filter2}/{Filter3}", new { controller = "Results", action = "Index", Category = UrlParameter.Optional, Filter1 = UrlParameter.Optional, Filter2 = UrlParameter.Optional, Filter3 = UrlParameter.Optional });
我们已经看到最终用户将添加其他参数的实例,从而导致以下错误:
"您要查找的资源已被删除,名称已更改或暂时无法使用。"
不是有效的网址: http://myshoppingsite.com/results/dresses/red/black/blue/purple
我的问题是,如果用户在我们网站页面中最初点击的网址末尾添加额外参数,或者通常情况下是电子邮件广告系列,我们如何阻止此错误?
谢谢,
朗达
答案 0 :(得分:0)
我找到了一种方法来做到这一点,如果其他人有这个问题,他们可能会觉得这很有用。
我可以在我的路线末尾添加一个“通配符”参数(我称之为CatchAll),如下所示:
routes.MapRoute("ResultsCanonicalFiltered", "results/{Categoy}/{Filter1}/{Filter2}/{Filter3}/{*CatchAll}", new { controller = "Results", action = "Index", Category = UrlParameter.Optional, Filter1 = UrlParameter.Optional, Filter2 = UrlParameter.Optional, Filter3 = UrlParameter.Optional, CatchAll = UrlParameter.Optional });
还将它作为ActionResult的属性/参数添加到控制器中,然后我们可以忽略该参数。
使用以下url,CatchAll参数将包含我们将忽略的值purple / yellow / orange。
http://myshoppingsite.com/results/dresses/red/black/blue/purple/yellow/orange
你有它。它可能不是最优雅的解决方案,但它可以工作并避免客户收到错误消息。
朗达