映射从根URL到动态产品标题/ id的路由

时间:2011-08-16 14:14:01

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我正在开发一个MVC 3应用程序

我想要一个类似的网址:

/一些产品名称 - 去-这里-4726482648
(4726482648是产品ID)

我还有其他网页,例如:

/分类名
(允许按类别浏览)

/约

等...

我怎样才能设置路由以允许此操作?

2 个答案:

答案 0 :(得分:3)

你肯定会在这里使用RouteConstraint

在您的路线中,您可以拥有以下内容:

routes.MapRoute("CustomProductUrl",
                 "{Product}",
                 new { controller = "Product", action = "Index" },
                 new { Product= new ProductConstraint() }
                );

然后在您的ProductConstraint类中,您将拥有如下内容:

    public class ProductConstraint : IRouteConstraint
    {

        public ProductConstraint ()
        {
        }

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            //do your logic in here to split the name and the id and amke sure it is valid data

            //if valid return true;
            //else false;
        }

    } 

最后在Index操作的Method签名(或路由中的操作)中取 - 的字符串 - 然后将其拆分并适当处理

让我知道是否有任何问题

答案 1 :(得分:1)

如果你能使它们略有不同,这将非常简单。例如,如果您可以使用以下URL结构:

/some-product-name-goes-here/4726482648 (notice the slash)
/category-name
/about

以下路线可以解决问题:

routes.MapRoute("about", "about", ... )
routes.MapRoute("product", "{product}/{id}", ... )
routes.MapRoute("category", "{category}", ... )