限制MVC路由上的额外参数导致错误

时间:2016-03-07 17:11:13

标签: model-view-controller routing

我有一个结果页面,可以在网址末尾添加参数。这些参数代表类别和过滤器,用于网站或电子邮件中的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

我的问题是,如果用户在我们网站页面中最初点击的网址末尾添加额外参数,或者通常情况下是电子邮件广告系列,我们如何阻止此错误?

谢谢,

朗达

1 个答案:

答案 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

你有它。它可能不是最优雅的解决方案,但它可以工作并避免客户收到错误消息。

朗达