是的,这是可能的。首先,您必须创建一个RouteConstraint 以确保选择了一个品牌。如果尚未选择品牌,则此路线应该失败,并且应该遵循重定向到品牌选择器的操作路线。 RouteConstraint 应该如下所示:
using System;
using System.Web;
using System.Web.Routing;
namespace Examples.Extensions
{
public class MustBeBrand : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
// return true if this is a valid brand
var _db = new BrandDbContext();
return _db.Brands.FirstOrDefault(x => x.BrandName.ToLowerInvariant() ==
values[parameterName].ToString().ToLowerInvariant()) != null;
}
}
}
然后,如下定义您的路线(假设您的品牌选择器是主页):
routes.MapRoute(
"BrandRoute",
"{controller}/{brand}/{action}/{id}",
new { controller = "News", action = "Index", id = UrlParameter.Optional },
new { brand = new MustBeBrand() }
);
routes.MapRoute(
"Default",
"",
new { controller = "Selector", action = "Index" }
);
routes.MapRoute(
"NotBrandRoute",
"{*ignoreThis}",
new { controller = "Selector", action = "Redirect" }
);
那么,在你的SelectorController:
public ActionResult Redirect()
{
return RedirectToAction("Index");
}
public ActionResult Index()
{
// brand selector action
}
如果您的主页不是品牌选择器,或者网站上有其他非品牌内容,则此路由不正确。您将需要 BrandRoute 和 Default 之间的其他路由,这些路由与您的其他内容相匹配。