2014-10-30 72 views
0

我正在从事电子商务项目(Asp.Net Mvc3)。我的产品和类别路由下面提到更正浏览网址上的可选路由参数

routes.MapLocalizedRoute(
    "Product", 
    "p/{productId}/{SeName}", 
    new { controller = "Catalog", action = "Product", SeName = UrlParameter.Optional }, 
); 

routes.MapLocalizedRoute(
    "Product", 
    "c/{categoryId}/{SeName}", 
    new { controller = "Catalog", action = "Category", SeName = UrlParameter.Optional }, 
); 

当使用浏览网址http://mysite.in/p/123/my-product其重定向到正确的产品,同样的事情发生的类别为好。

现在,当我提供错误的SeName或只是从URL中删除SeName它重定向到正确的产品/类别,这是正确的。但是我想要追加有效的SeName,即,如果URL sename中存在错误或没有SeName,则应该在url中添加repsective product/category。以上功能性对Site SEO有任何影响。

Stackoverflow做同样的想法,即虽然SeName是可选的,如果没有提供,它会追加seName。

如果有人在同一个问题上工作过,请回复。

+1

这通常是使用动作过滤器完成的。 [本博客](http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/),虽然不完全相同的问题,应该指出你在正确的方向。 – 2014-10-30 09:41:52

+0

@StephenMuecke我认为这是我想要的,但如果每次调用db来检查动作过滤器中的sename并在需要时替换 – 2014-10-30 10:01:03

+0

除非在某处缓存ID/Name值,否则这将是唯一的选择我怀疑它超过几毫秒) – 2014-10-30 10:05:44

回答

1

这被称为'slug',通常在动作过滤器中处理。 Phil Haack有一篇很好的文章Manipulating Action Method Parameters,详细解释它。基本概念是处理过滤器OnActionExecuting方法以提取ID参数的路由值,然后从数据库中查找相应的名称并将该值添加到Name参数中。