我正在开发一个MVC 3应用程序
我想要一个类似的网址:
/一些产品名称 - 去-这里-4726482648
(4726482648是产品ID)
我还有其他网页,例如:
/分类名
(允许按类别浏览)
/约
等...
我怎样才能设置路由以允许此操作?
答案 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}", ... )