Как использовать 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 ();

Другие вопросы по тегам