2017-11-30 10 views
0

저는 웹 사이트에서 Route Constraint를 사용합니다. 이제 특성 라우팅을 사용해야합니다.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}")] 

특성 라우팅 및 경로 제약의 일단. 그러나이 경우 속성 라우팅과 같이 함께 사용할 경우에만 작동하고 경로 제한은 작동하지 않습니다.

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" } 
       ); 
} 

어떻게 사용할 수있는 경로 제약과 특성이 함께 라우팅?

+1

사용자 지정 특성을 만들어야합니다. [이 기사] (https://weblogs.asp.net/jongalloway/looking-at-asp-net-mvc-5-1-and-web-api-2 -1-part-2-attribute-routing-with-custom-constraints) 예를 들어 –

+0

내 URL 중 하나는 "/ Bus-Ticket"입니다. 현재이 속성 라우팅을 삭제하는 경우 또는 현재 [Route ("Bus-Ticket")]이 현재 작동합니다. 이제 맞춤 속성 라우팅을 만드는 방법은 무엇입니까? 코드를 게시 할 수 있습니까? – programmer138200

답변

0

라우팅은 RouteConfig 파일에서 순차적으로 정의한대로 작동합니다.

당신의 RouteConfig.cs에 따라) (당신이 routes.MapMvcAttributeRoutes을 정의

파일; -> 속성 라우팅 을 입력 한 다음 기존 라우팅을 정의했습니다.

컨트롤러에서 두 라우팅을 모두 사용한 경우 속성 라우팅 만 작동합니다.

기존 라우팅에 따라 작업하려면 def 시퀀스를 변경하십시오.

먼저 라우팅 경로를 정의하십시오. MapRoute() routes.MapMvcAttributeRoutes();

+0

Dno't work ..... – programmer138200