Как использовать Route Constraint и Attribute Routing вместе?
Я использую Route Constraint на своем веб-сайте, и теперь мне нужно использовать Attribute Routing.
Класс ограничения маршрута:
public class BusConstraint : IRouteConstraint
{
private RouteDB routeDb = new RouteDB();
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
if (values[parameterName] != null)
{
var permalink = values[parameterName].ToString();
try
{
List<AdakDbConnect.RouteTable> routeTables;
if (HttpContext.Current.Cache["RouteTables"] == null)
{
routeTables = routeDb.GetRouteTables(AdakDbDll.Username, AdakDbDll.Password);
HttpContext.Current.Cache.Add("RouteTables", routeTables, null, DateTime.Now.AddMinutes(45), TimeSpan.Zero, CacheItemPriority.Normal, null);
}
else
{
routeTables = HttpContext.Current.Cache["RouteTables"] as List<AdakDbConnect.RouteTable>;
}
RouteTable Route = routeTables?.FirstOrDefault(p => p.Link == permalink && p.Controlller == "Bus");
if (Route != null)
{
return true;
}
}
catch (System.Exception)
{
}
return false;
}
return false;
}
}
Для маршрутизации атрибутов используйте этот код выше действия:
[Route("Bus")]
[Route("Bus/index")]
[Route("Bus/{From:int}/{To:int}/{Date:int}/{IsForeign:int:range(0,1)}/{Title}")]
Когда-то атрибуты Routing и Route Constraint работали в настоящее время одни. Но когда я использую вместе, как в этом случае, Attribute Routing работает только, а Route Constrain не работает.
RouteConfig:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapMvcAttributeRoutes();
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//---------------------BusRoute---------------------------
routes.MapRoute(
name: "BusRoute",
url: "{*permalink}",
defaults: new { controller = "Bus", action = "Index" },
constraints: new { permalink = new BusConstraint() },
namespaces: new[] { "TravelEnterProject.Controllers" }
);
}
Как я могу использовать Route Constraint и Attribute Routing вместе?
1 ответ
Маршрутизация будет работать, как вы определили в файле RouteConfig последовательно.
согласно вашему файлу RouteConfig.cs
вы определили маршруты.MapMvcAttributeRoutes(); -> для атрибута маршрутизации, а затем вы определили обычную маршрутизацию.
Таким образом, если вы использовали обе маршрутизации в вашем контроллере, тогда будет работать только атрибут маршрутизации.
Если вы хотите работать в соответствии с обычной маршрутизацией, измените последовательность определения.
сначала определите обычные маршруты маршрутизации.MapRoute(), затем маршруты.MapMvcAttributeRoutes ();