我尝试创建http://www.domain.com/product
路线。
它应该在数据库中查找产品名称,如果找到,则调用控制器,如果没有,则调用下一个路径。
我试图创建下面的路线,但如果在数据库中找不到{shortcut}
产品名称,我无法确定如何遵循下一条路线。
routes.MapRoute(
name: "easyshortcut",
url: "{shortcut}",
defaults: new { controller = "Home", action = "Product" }
);
由于
答案 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进行了调整。)