Да, это возможно. Во-первых, вы должны создать 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, которые соответствуют маршрутам к вашему другому контенту.