如何创建www.domain.com/product MVC路线

时间:2015-04-19 19:12:17

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

我尝试创建http://www.domain.com/product路线。 它应该在数据库中查找产品名称,如果找到,则调用控制器,如果没有,则调用下一个路径。

我试图创建下面的路线,但如果在数据库中找不到{shortcut}产品名称,我无法确定如何遵循下一条路线。

routes.MapRoute(
  name: "easyshortcut",
  url: "{shortcut}",
  defaults: new { controller = "Home", action = "Product" }
);

由于

1 个答案:

答案 0 :(得分:2)

您可以通过路线约束来执行此操作:

routes.MapRoute(
    name: "easyshortcut",
    url: "{shortcut}",
    defaults: new { controller = "Home", action = "Product" },
    constraints: new { name = new ProductMustExistConstraint() }
);

name的产品操作中HomeController是您的参数名称。

然后实现约束:

public class ProductMustExistConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext, 
        Route route, 
        string parameterName, 
        RouteValueDictionary values, 
        RouteDirection routeDirection)
    {
        var productNameParam = values[parameterName];
        if (productNameParam != null)
        {
            var productName = productNameParam.ToString();

            /* Assuming you use Entity Framework and have a set of products 
             * (you can replace with your own logic to fetch the products from 
             *  the database). 
             */

            return context.Products.Any(p => p.Name == productName);
        }

        return false;

    }
}

(以上内容根据此answer进行了调整。)