【问题标题】:How to create www.domain.com/product MVC route如何创建 www.domain.com/product MVC 路由
【发布时间】:2015-06-26 09:24:03
【问题描述】:

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    你可以通过路由约束来做到这一点:

    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调整到这种情况的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2023-03-14
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多